【发布时间】:2012-04-25 02:11:51
【问题描述】:
我在表单上有一系列文本框。当用户在这些文本框中插入数字时,会进行计算并通过 JavaScript 更新 <asp:Label> 控件以反映这些计算:
document.getElementById('<%=TotalLoans.ClientID %>').innerHTML = TotalLoans;
这会正确更新 UI。但是,当我尝试访问代码隐藏中的值时,Text 属性为空。我想这是有道理的,因为我是通过 JavaScript 更新 innerHTML 属性的。
//TotalLoans.Text will always be equal to "" in this scenario
double bTotalLoans = string.IsNullOrEmpty(TotalLoans.Text)
? 0.00
: Convert.ToDouble(TotalLoans.Text);
如何通过 JavaScript 更新 <asp:Label> 的 Text 属性,以便我可以读取代码隐藏中的属性?
更新
这是包含 41 个标签的大型表单上的一个小问题,每个标签都为用户显示一些计算的结果。听从 FishBasketGordo 的建议,我将我的 <asp:Label> 转换为已禁用的 <asp:TextBox>。我正在设置新文本框的值:
document.getElementById('<%=TotalLoans.ClientID %>').value = TotalLoans;
同样,在代码隐藏中,TotalLoans.Text 的值始终等于“”。
我不介意改变我的处理方式,但这就是问题的关键。
我正在使用 JavaScript 来操作某些控件的属性值。单击“提交”时,我需要能够从后面的代码中访问这些操作值。
有什么建议可以解决这个问题吗?
更新 2
关于@James Johnson 的回答,我无法按照建议使用.innerText 属性检索值。我在<asp:Label> 上将EnableViewState 设置为true。我还有什么遗漏的吗?
我不明白为什么,当我输入文本框并提交表单时,我可以访问代码隐藏中的值,但是当我通过 JavaScript 以编程方式更改文本框或标签的文本时,我无法访问新值。
【问题讨论】:
-
这可能是不可能的,因为
asp:Label不是<input>的类型。我觉得我以前遇到过这种情况,不得不使用隐藏的输入让服务器识别它。 -
您正在执行的操作将在回发发生后起作用。 Asp.net/Server 不知道是否有任何变化,直到它再次有机会查看它。
-
虽然你可以让它们工作,但
<asp:Label>控件并不是你正在做的事情的正确选择。我会考虑使用只读文本框或更符合语义的文本框。 -
感谢 FishBasketGordo,请查看更新
-
@splatto:更新了我的答案。我想我已经为你找到了一个很好的解决方案。
标签: javascript asp.net label code-behind