asp:panel show hide无法使用Jquery

时间:2012-09-04 09:38:48

标签: jquery asp.net

我在ASPX页面上有两个面板和一个文本框。两个面板都包含静态文本以及单选按钮以及必需的字段验证器。要求如下。

  1. 每当第一次加载页面时,如果文本框的值大于1000,则第一个面板不应显示,第二个面板应显示。
  2. 如果值小于1000,则应显示第一个面板,不应显示第二个。
  3. 现在,问题是:

    文本框值可以由用户更改,因此根据输入的值,使用jQuery我需要显示适当的面板。我不想为每个静态文本添加标签,然后逐个为所有标签和单选按钮设置相同的属性;这就是我使用<asp:Panel>

    的原因
    1. 我无法从后面的代码中将visible属性设置为false,因为此面板不会在ASPX页面上呈现并显示,隐藏将无效。
    2. 我尝试从代码中设置panelNA.Style.Add(HtmlTextWriterStyle.Display, "none"),但这也不起作用。由于静态文本和控件仍在UI上可见。
    3. 由于我在面板内的单选按钮上需要字段验证器,所以我希望如果分别隐藏或显示面板,则应禁用和启用这些验证器。
    4. 在保存内容时,我无法检查是否可见的面板状态,因为它是由jQuery设置的。所以它在服务器端不可用,它总是说visible = true
    5. 代码:

      function disablePanelNA() {
        var value = 0;
        value = parseInt($('#<%=txt1.ClientID %>').val(), 10);
        if (value < 1000) {
         $('#<%= panel.ClientID %>').hide();
         $('#<%= panelNA.ClientID %>').show();
        }
        else
        {
          $('#<%= panel.ClientID %>').show();
          $('#<%= panelNA.ClientID %>').hide();
        }
      }
      <asp:TextBox ID="txt1" runat="server" onChange="disablePanelNA()" />
      <asp:Panel ID="panel" runat="server">
      <tr>
        <td class="numberColumnNoBold">a.</td>
        <td>Do you want to continue?</td>
        <td align="right">
          <asp:RadioButtonList ID="rbl1" runat="server" RepeatDirection="Horizontal">
            <asp:ListItem Value="Yes" Text="Yes" />
            <asp:ListItem Value="No" Text="No" />
          </asp:RadioButtonList>
          <AjaxRequiredFieldValidator ID="id1" runat="server" ControlToValidate="rbl1" 
                                      ErrorMessage="Error occured" />
        </td>
      </tr>
      <tr>
        <td class="numberColumnNoBold">b.</td>
        <td>Do you want to exit?</td>
        <td align="right">
          <asp:RadioButtonList ID="rbl2" runat="server" RepeatDirection="Horizontal">
            <asp:ListItem Value="Yes" Text="Yes" />
            <asp:ListItem Value="No" Text="No" />
          </asp:RadioButtonList>
          <AjaxRequiredFieldValidator ID="id2" runat="server" ControlToValidate="rbl2"
                                      ErrorMessage="Error occured again" />
        </td>
      </tr>
      </asp:panel>
      
      <asp:Panel ID="panelNA" runat="server">
      <tr>
        <td class="numberColumnNoBold">a.</td>
        <td>Do you want to continue?</td>
        <td align="right">
          <td align="right">
            <div style="text-align:right;font-weight:bold;padding-right:20px;">N/A</div>
          </td>
        </td>
      </tr>
      <tr>
        <td class="numberColumnNoBold">b.</td>
        <td>Do you want to exit?</td>
        <td align="right">
          <div style="text-align:right;font-weight:bold;padding-right:20px;">N/A</div>
        </td>
      </tr>
      </asp:panel>
      

2 个答案:

答案 0 :(得分:0)

在后面的代码中使用此

pnl.Style.Add("display", "none");

要从javascript中禁用验证器,请使用此

ValidatorEnable(document.getElementById('<%= reqfile.ClientID %>'), false);
ValidatorEnable(document.getElementById('<%= reqfile.ClientID %>'), true);

为了显示隐藏div,您不需要知道div的可见状态,因为根据您提到的逻辑,div将根据文本框的值隐藏或显示。

另请在粘贴前格式化代码。

答案 1 :(得分:0)

如果设置Visible =&#34; false&#34;在.aspx标记/代码后面,ASP.Net控件不会在页面中呈现。

最好删除Visible =&#34; false&#34;在面板中设置并添加样式display:none。

如果你想在后面的代码中使用此代码

pnlUpdateDisplay.Style.Add(HtmlTextWriterStyle.Display,"none");

然后使用

$('#<%=pnlUpdateDisplay.ClientID %>').toggle()