根据从另一个页面选择的复选框值显示 'Div'

Display A 'Div' Depending On Selection Of Checkbox Value From Another Page

我有一个问题。我有一个 asp.net webform,它有一个将数据存储在 session 中的进程。我无法解决的问题是,其中一个页面显示了整个过程中输入的所有详细信息,但只需要显示其中的一个部分,具体取决于我的 checkboxlist 中的 selection。

HTML 我的 checkboxlist

<asp:CheckBoxList runat="server" id="Services" CssClass="CheckboxList">
    <asp:ListItem Text="All services" Value="All services"></asp:ListItem>
    <asp:ListItem Text="Site content uploading only" Value="Site content uploading only"></asp:ListItem>
    <asp:ListItem Text="Site content &amp; layout checking" Value="Site content &amp; layout checking"></asp:ListItem>
    <asp:ListItem Text="Testing on various browsers" Value="Testing on various browsers"></asp:ListItem>
    <asp:ListItem Text="Testing all website functionality" Value="Testing all website functionality"></asp:ListItem>
    <asp:ListItem Text="Responsive design (Design/Implemtation only)" Value="Responsive design (Design/Implemtation only)"></asp:ListItem>
    <asp:ListItem Text="Responsive design (Testing only)" Value="Responsive design (Testing only)"></asp:ListItem>
</asp:CheckBoxList>

上面的代码隐藏在 session

中存储 select 离子
private void SessionSaving()
{
    List<string> selections = new List<string>();
    foreach (ListItem listItem in Services.Items)
    {
        if (listItem.Selected)
        {
            selections.Add(listItem.Value);
        }
    }

    Session["Step02Services"] = selections;
}

HTML 我的确认页面

<div class="form-group">
    <asp:Label ID="Step04BrowsersLabel" class="col-xs-6 col-sm-3 control-label" runat="server" Text="Browser(s) to check on:"></asp:Label>
    <div class="col-xs-6 col-sm-9 form-control-static">
        <%= string.Join(", <br />",((List<string>)Session["Step04Browsers"]).ToArray()) %>

        <% if (Session["Step04OtherField"] != "")
        {%>
            <br />    
            <%=Session["Step04OtherField"] %>
        <%} %>
    </div>
</div>

如果出现以下任何一种选中复选框的情况,我不希望显示上述部分:

我尝试了以下 if,它并不总是为我显示。如果我删除 ||'s 并只使用第一行,它会为我隐藏它。如果我 select "Site content uploading only" 复选框和另一个复选框它也会显示 if for me (这是正确的)。

if (string.Join("", ((List<string>)Session["Step02Services"]).ToArray()) != "Site content & layout checking"
    || string.Join(", <br />", ((List<string>)Session["Step02Services"]).ToArray()) != "Site content & layout checking"
    || string.Join("", ((List<string>)Session["Step02Services"]).ToArray()) != "Site content & layout checking" && string.Join(", <br />", ((List<string>)Session["Step02Services"]).ToArray()) != "Site content & layout checking")

如何 write/correct 我的 if 以上?

我的修复是确认页面上的HTML,如下所示

if (Session["Step04Browsers"] != null)
{    
<div class="form-group">
        <asp:Label ID="Step04BrowsersLabel" class="col-xs-6 col-sm-3 control-label" runat="server" Text="Browser(s) to check on:"></asp:Label>
        <div class="col-xs-6 col-sm-9 form-control-static">
            <%= string.Join(", <br />",((List<string>)Session["Step04Browsers"]).ToArray()) %>

            <% if (Session["Step04OtherField"] != "")
            {%>
                <br />    
                <%=Session["Step04OtherField"] %>
            <%} %>
        </div>
    </div>
}

您甚至不需要在会话中存储任何内容,您可以在所有客户端执行此操作。要获取选定的列表项,您可以使用:

var checked_checkboxes = $("#<%= Services.ClientID %> input:checked")

然后你可以这样获取值和文本:

checked_checkboxes.each(function() {
     var value = $(this).val();
     var text = $(this).closest("td").find("label").html();
}); /* You can also use a for loop */

我建议更改

<asp:CheckBoxList runat="server" id="Services" CssClass="CheckboxList">

<asp:CheckBoxList runat="server" id="Services" CssClass="CheckboxList" onclick="ChangeCheckBox();">

其中 ChangeCheckBox 是一个 javascript 函数,它获取如上所示的选定值,然后 hides/shows div 基于选定的值。

我昨天一定是脑子放了个大屁,因为今天早上天气晴朗。出于某种原因,当我 post 编辑此 post 时,我正在查看从我的服务复选框列表中做出的选择,而实际上我所要做的就是在另一个页面上查看我的浏览器复选框列表。如果它是空的不显示否则显示它。不敢相信我昨天没想到这个。

div 包装在:

if (Session["Step04Browsers"] != null)