使用javascript更改标签文本并从后面的代码中读取

时间:2014-07-13 21:56:04

标签: javascript asp.net

我有一个带有标签的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仍为空。为什么?有什么办法可以解决这个问题吗?

感谢。

2 个答案:

答案 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)

ASP.NET的

ID="Label1"是服务器端,但对于javascript,我们需要一个客户端ID,即"<%=Label1.ClientID%>"