c# - 为什么单击 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";
我不明白为什么单击按钮时标签文本会更改。调试时我也找不到任何东西。
谢谢
解决方案
当您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);
}
推荐阅读
- php - 比较字符串 PHP 的前 4 个字符
- bash - Shell脚本ssh登录并在远程执行命令
- c++ - 初始化一个 long double;打印不同的值
- arrays - 根据行重复 Numpy 数组可变次数
- android - 在自定义 TextView 中访问 dimen xml 文件中的值
- html - CSS - 具有两个独立父 div 的 Flex 定位
- python - 有没有办法检测用户移动的 pygame 显示窗口?
- java - JDA 事件获取器返回 null 并让所有成员在一个角色中只返回机器人本身
- .net - 从 Visual Studio 2019 中的多目标项目调用 Web 服务
- angular - Angular Material DatePicker -- 错误:mat-form-field 必须包含 MatFormFieldControl