【问题标题】:asp:panel show hide not working with Jqueryasp:panel show hide 不适用于 Jquery
【发布时间】:2012-08-28 22:45:52
【问题描述】:

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

  1. 第一次加载页面时,如果文本框的值大于 1000,则不应显示第一个面板,而应显示第二个面板。
  2. 如果值小于 1000,则应显示第一个面板,而不应显示第二个面板。

现在,问题是:

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

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

代码:

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>

【问题讨论】:

  • 尝试格式化您的代码,但看起来它需要永远。 :)

标签: jquery asp.net


【解决方案1】:

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

最好去掉面板中设置的 Visible="false" 并添加样式 display:none。

如果你想在后面的代码中制作它,请遵循此代码

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

然后使用

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

【讨论】:

    【解决方案2】:

    在后面的代码中使用这个

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

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

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

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

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

    【讨论】:

    • 我已经尝试过 pnl.Style.Add("display", "none");从后面的代码,但它不起作用。面板内的控件仍在显示中。还显示面板的隐藏不起作用。我也尝试使用上面的代码禁用reuired 归档验证器的启用,但问题是,每当面板使用它变得可见时,一旦这些验证器被触发并显示错误消息,这是不好的。
    • 我已经重新检查了 pnl.Style.Add("display", "none");它确实有效。
    • 嗯,我不确定我错在哪里。我用另一个 asp:panel 尝试了同样的事情,例如:asp:Panel ID="panelTest" EnableViewState="true" Runat="server"> Hello World 。它适用于此并且确实隐藏了文本“Hello world”,但是当我放置更多 tr 和 td 然后插入更多控件(如上面代码中提到的)如单选按钮时,这些控件仍会显示。
    • 在面板内尝试基于 div 的结构,而不是基于表格的结构
    • 这真的很重要吗?归根结底,我们只隐藏面板。这些东西会被区别对待吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    相关资源
    最近更新 更多