为什么单击asp.net按钮后标签文本会更改?

时间:2019-07-05 14:23:46

标签: c# jquery asp.net

我有一个WebForm ASP标签和按钮。我正在页面加载时设置标签的值。例如,页面加载时的标签文本为2 items selected。这来自数据库。然后,如果用户更改选择,则它将通过jQuery计算选择的值,并将文本设置为5 items selected

当我单击提交按钮以保存更改时,它再次重置为2 items selected。我没有使用更新面板。我不知道这是怎么回事。谁能解释这种情况?

$("#lblCount").text($('#grdProducts').find('input#chkSelect:checked').length + ' Complementary Products added');

页面加载时的C#:

lblCount.Text = ComplementaryproductCount.ToString() + " Complementary Products added";

我不明白为什么单击按钮时更改了标签文本。调试时也找不到任何东西。

谢谢

1 个答案:

答案 0 :(得分:1)

当您在代码中设置lblCount.Text时,该值将设置到页面的ViewState中……这意味着页面被发布回服务器时(用于处理事件等) )ASP.Net知道lblCount.Text最初是什么,并且可以重新渲染具有相同值的HTML。

作为回发到服务器的一部分,浏览器将把ViewState与所有输入控制值(诸如文本框,下拉列表,隐藏字段之类的东西)一起发送回去。

它不做的是通过jQuery(除了我上面提到的输入控件之外)回传您可能对页面上的元素所做的任何更改。

结果是,尽管您已经更改了屏幕上的元素,但服务器完全不知道该更改,它将把标签的原始HTML重新发送回浏览器。

您唯一的选择是执行@John在其注释中建议的操作...您需要在输入中存储元素已更改的事实,然后使用它。

例如...

<asp:Label runat="server" id="lblCount" />
<asp:HiddenField runat="server" id="hdnCount" />

function updateCount(newCount) {
  $("#<%=lblCount.ClientID%>").text("Count: " + newCount.toString());
  $("#<%=hdnCount.ClientID%>").val(newCount.toString());
}

然后在您的代码隐藏中,您可以拥有...

if (!Page.IsPostBack)
{
   var count = 1;
   lblCount.Text = String.Format("Count: {0}", count);
   hdnCount.Value = count.ToString();
}
else
{
   lblCount.Text = String.Format("Count: {0}", hdnCount.Value);
}