我的面板无法显示用户是否单击特定的下拉列表项

时间:2017-07-18 10:01:22

标签: c# asp.net

我尝试在选择特定<div>时显示ListItem

在我的代码背后,我有:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
{                       
    if (reportedBefore.SelectedItem.Text=="yes") 
    {
        reportedBeforePanel.Visible = true;
    }
    else
    {
        reportedBeforePanel.Visible = false;
    }                   
}

我最初提到this article here,其中说我需要一些东西:

  

您需要启用下拉列表的AutoPostBack以在服务器端引发OnSelectedIndexChanged事件。

AutoPostBack="true"
OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged

不可否认,我以前没有AutoPostBack。添加后,我担心由于某种原因,请求的div仍未显示。

<asp:DropDownList ID="reportedBefore" CssClass="larger-drop-2" AutoPostBack="true" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
            <asp:ListItem Text="Select" Value="Select"></asp:ListItem>
            <asp:ListItem Text="No" Value="No"></asp:ListItem>
            <asp:ListItem Text="Yes" Value="Yes"></asp:ListItem>
            <asp:ListItem Text="Unsure" Value="Unsure"></asp:ListItem>
 </asp:DropDownList>
   <asp:Panel ID="reportedBeforePanel" runat="server" Visible="false">
            <div id="showDiv">
              <label for="yesDetails">
                 Please provide details
              </label>
      <asp:TextBox ID="yesDetails" CssClass="third-w-form" runat="server"/>
             </div>
  </asp:Panel>

有人会这么善意帮助我吗?

2 个答案:

答案 0 :(得分:1)

C#区分大小写,因此"Yes"不是"yes"

reportedBeforePanel.Visible = reportedBefore.SelectedItem.Text == "Yes"; 

另外,你可以使用这个:

reportedBeforePanel.Visible = reportedBefore.SelectedItem.Text.Equals("yes", StringComparison.InvariantCultureIgnoreCase);

答案 1 :(得分:1)

问题出在以下if - 条件:

reportedBefore.SelectedItem.Text=="yes"

通过这种方式,您正在进行区分大小写的字符串比较(这是.NET中的默认值),但下拉列表中的值是以不同的方式编写的(&#34;是&#34; < / strong> vs. &#34; yes&#34; )。

为了解决此问题,请执行不区分大小写的字符串比较

string.Compare(reportedBefore.SelectedItem.Text, "yes", true) == 0

或更改if - 声明中的大小写。