我有一个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";
我不明白为什么单击按钮时更改了标签文本。调试时也找不到任何东西。
谢谢
答案 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);
}