我在表单上有一系列文本框。当用户在这些文本框中插入数字时,会进行计算并通过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更新Text
<asp:Label>
属性,以便我可以在代码隐藏中读取属性?
这是一个包含41个标签的大型表单上的一个小问题,每个标签都会显示用户的某些计算结果。根据FishBasketGordo的建议,我将<asp:Label>
转换为禁用<asp:TextBox>
。我正在设置新文本框的值:
document.getElementById('<%=TotalLoans.ClientID %>').value = TotalLoans;
同样,在代码隐藏中,TotalLoans.Text
的值始终等于“”。
我不介意改变我的方法,但这是问题的关键。
我使用JavaScript来操纵某些控件的属性值。当点击“提交”时,我需要能够从后面的代码中访问这些被操纵的值。
我有什么建议可以解决这个问题吗?
关于@James Johnson的回答,我无法按照建议使用.innerText
属性检索值。我在EnableViewState
上将<asp:Label>
设置为true。还有其他我想念的东西吗?
我不明白为什么,当我输入文本框并提交表单时,我可以访问代码隐藏中的值,但是当我以编程方式通过JavaScript更改文本框或标签的文本时,我无法访问新的价值。
答案 0 :(得分:16)
<asp:HiddenField ID="hidden" runat="server" />
protected String LabelProperty
{
get
{
return hidden.Value;
}
set
{
hidden.Value = value;
}
}
<script>
function UpdateControl() {
document.getElementById('<%=hidden.ClientID %>').value = '12';
}
</script>
现在,您可以直接通过Postback
访问该媒体资源。 Label
控件更新值将在PostBack
之间丢失,以防在后面的代码中直接使用。
答案 1 :(得分:4)
这个适用于我的asp标签控制。
function changeEmaillbl() {
if (document.getElementById('<%=rbAgency.ClientID%>').checked = true) {
document.getElementById('<%=lblUsername.ClientID%>').innerHTML = 'Accredited No.:';
}
}
答案 2 :(得分:2)
使用以下代码
<span id="sptext" runat="server"></span>
Java脚本
document.getElementById('<%=sptext'%>).innerHTML='change text';
C#
sptext.innerHTML
答案 3 :(得分:1)
而不是使用Label
使用文本输入:
<script type="text/javascript">
onChange = function(ctrl) {
var txt = document.getElementById("<%= txtResult.ClientID %>");
if (txt){
txt.value = ctrl.value;
}
}
</script>
<asp:TextBox ID="txtTest" runat="server" onchange="onChange(this);" />
<!-- pseudo label that will survive postback -->
<input type="text" id="txtResult" runat="server" readonly="readonly" tabindex="-1000" style="border:0px;background-color:transparent;" />
<asp:Button ID="btnTest" runat="server" Text="Test" />
答案 4 :(得分:1)
由于您已更新标签客户端,因此您需要进行回复,以便您使用服务器端代码来反映更改。
如果您不知道如何做到这一点,过去我就是这样做的。
创建隐藏字段:
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
创建一个连接了客户端和服务器端功能的按钮。您的客户端功能将填充您的隐藏字段,服务器端将读取它。确保首先调用客户端。
<asp:Button ID="_Submit" runat="server" Text="Submit Button" OnClientClick="TestSubmit();" OnClick="_Submit_Click" />
Javascript客户端功能:
function TestSubmit() {
try {
var message = "Message to Pass";
document.getElementById('__EVENTTARGET').value = message;
} catch (err) {
alert(err.message);
}
}
C#服务器端功能
protected void _Submit_Click(object sender, EventArgs e)
{
// Hidden Value after postback
string hiddenVal= Request.Form["__EVENTTARGET"];
}
希望这有帮助!
答案 5 :(得分:0)
标签的信息存储在回发中的ViewState输入中(请记住,服务器对返回的表单值之外的页面一无所知,其中包括标签的文本)..你必须以某种方式更新客户方知道该标签中发生了哪些变化,我猜这不值得你花时间。
我不完全确定你在这里要解决的问题,但这可能会给你一些如何解决它的想法:
您可以创建一个隐藏字段以与标签一起使用,并且无论何时更新标签,您都会更新该值。然后在后面的代码中设置标签的Text属性为那个隐藏的领域。
答案 6 :(得分:0)
Asp.net代码隐藏首先在服务器上运行,然后将页面呈现给客户端(浏览器)。 Codebehind无法访问客户端(javascript,html),因为它只存在于服务器上。
因此,要么使用ajax并将标签值发送给后面的代码。您可以使用PageMethods
,或者只是将页面发布到代码隐藏所在的服务器,因此代码隐藏可以知道更新的值:)