我如何在asp.net按钮单击中使用javascript变量值

时间:2017-05-13 14:55:07

标签: javascript c# asp.net

鉴于

<asp:Label ID="lbldistance" runat="server"></asp:Label>

我正在为它赋值:

var distance = response.rows[0].elements[0].distance.text;
document.getElementById('<%=lbldistance.ClientID%>').innerHTML=distance;

我想在文本框中分配lbldistance值

protected void btnValue_Click(object sender, EventArgs e)
{
    txtJSValue.Text = lbldistance.Text;
}

但是当我点击btnValue时,lbldistance值消失了,我没有看到TextBox中的值..

1 个答案:

答案 0 :(得分:0)

恐怕你不能用标签做到这一点。在ASP.NET中,状态在回发中保留在ViewState中。 ASP.NET <asp:Label>呈现为HTML spanspan没有ViewState。因此,当您更改标签的innerHTML时,实际上是在更改innertHTML标记的span。按下按钮后,页面将发布到构建Label的服务器,并使用初始文本构建,而不是您认为应该更改span的文本。我认为这(标签不保留ViewState)是有充分理由的:

  

HTML标签应向用户显示某些内容,并且不应由用户更改,因此没有必要保持回发状态。

要完成您想要的任务,请使用如下隐藏字段:

<asp:HiddenField ID="HiddenField1" runat="server" />

你的javascript:

var distance = response.rows[0].elements[0].distance.text;
// Assign distance to your label so it shows on the page
document.getElementById('<%=lbldistance.ClientID%>').innerHTML=distance;

// Assing distance to hidden field so you can get it on the server side
document.getElementById('<%=HiddenField1.ClientID%>').value = distance;

以下是如何在服务器端获取值:

 txtJSValue.Text = this.HiddenField1.Value;

我不确定您为什么要一直到服务器更改Text文本框的txtJSValue。您可以在浏览器端轻松完成设置标签:

document.getElementById('<%=txtJSValue.ClientID%>').value = distance;