首页 > 解决方案 > 为什么单击 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";

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

谢谢

标签: c#jqueryasp.net

解决方案


当您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);
}

推荐阅读