Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么单击asp.net按钮后标签文本会发生更改?_C#_Jquery_Asp.net - Fatal编程技术网

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

C# 为什么单击asp.net按钮后标签文本会发生更改?,c#,jquery,asp.net,C#,Jquery,Asp.net,我有一个WebFormASP标签和按钮。我正在页面加载时设置标签的值。例如,页面加载时的标签文本为选中的2项。这来自数据库。然后,如果用户更改了选择,那么它将通过jQuery对所选值进行计数,并将文本设置为5个选定项 当我单击submit按钮保存更改时,它再次重置为所选的2个项目。我没有使用更新面板。我不知道这里发生了什么。有人能解释一下这种情况吗 $("#lblCount").text($('#grdProducts').find('input#chkSelect:checked').leng

我有一个WebFormASP标签和按钮。我正在页面加载时设置标签的值。例如,页面加载时的标签文本为选中的
2项
。这来自数据库。然后,如果用户更改了选择,那么它将通过jQuery对所选值进行计数,并将文本设置为
5个选定项

当我单击submit按钮保存更改时,它再次重置为所选的
2个项目
。我没有使用更新面板。我不知道这里发生了什么。有人能解释一下这种情况吗

$("#lblCount").text($('#grdProducts').find('input#chkSelect:checked').length + ' Complementary Products added');
C#页面加载时:

lblCount.Text=ComplementaryproductCount.ToString()+“添加了补充产品”;
我不明白为什么点击按钮时标签文本会改变。调试时我也找不到任何东西


谢谢

当您在代码中设置
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());
}

您是否以某种方式将jquery更改提交到服务器,以便在重新加载页面时反映出来?是的,我正在将更新的计数保存到数据库中。但还有一件事是,我并不是每次都填充页面加载上的所有数据。所以,单击按钮时,它不会再次填充数据。所以,我关心的是,它应该保持与我从jquery设置的相同。为什么要更改?如果页面正在重新加载,您之前使用jQuery所做的操作在之后将不会有任何影响,因此我猜测您在设置标签之前没有检查输入。加载时,我显示数据库中已保存项目的文本计数。使用Jquery,我为新选定项的计数设置文本。但在保存时,我不会再次填充数据,因为除此标签外,所有控件都有新值@我想不客气。这不是一个容易理解的概念,但对于ASP.Net开发来说却是一个非常重要的概念(特别是在涉及DOM操作时)。请记住勾选你认为最有用的答案,这样社区就知道你的问题得到了解决,你也获得了非常有用的声誉,这将允许你在网站上做更多的事情
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);
}