我有一个带有标签的asp.net页面。标签没有文字。
<asp:Label ID="Label1" runat="server"></asp:Label>
在某些时候,我调用javascript
函数,为标签添加一些内容,如下所示:
function myFunc() {
label = document.getElementById("Label1");
list = document.getElementById("list");
label.innerHTML = list.innerText;
}
该功能完成后,我点击页面上的一个按钮,调用其onclick
事件:
protected void Button1_Click(object sender, EventArgs e)
{
string a = Label1.Text;
}
出于某种原因,Label1.Text
仍为空。为什么?有什么办法可以解决这个问题吗?
感谢。
答案 0 :(得分:2)
因为该值未发布到代码隐藏。
无论WebForms试图隐藏多少,从网页发布到服务器的唯一数据就是form
元素中的数据。 WebForms对标签文本等内容的作用是将它们作为一个大的序列化base-64编码字符串填充到input type="hidden"
中。 (它称之为“视图状态”,但它实际上只是一个隐藏的form
元素。)
更改页面标记不会改变服务器端的任何内容,因为页面标记未发布到服务器。
可以做的是创建表单元素并将其与标记一起更改。简单的事情:
<asp:HiddenField runat="server" ID="Hidden1" />
每当您在JavaScript中更改标记时,也要更改该值:
label = document.getElementById("Label1");
hidden = document.getElementById("Hidden1");
list = document.getElementById("list");
label.innerHTML = list.innerText;
hidden.value = list.innerText;
此将被发回服务器,因为它是form
元素。然后,您可以访问值服务器端:
string a = Hidden1.Value;
答案 1 :(得分:0)
ID="Label1"
是服务器端,但对于javascript,我们需要一个客户端ID,即"<%=Label1.ClientID%>"