鉴于
<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中的值..
答案 0 :(得分:0)
恐怕你不能用标签做到这一点。在ASP.NET中,状态在回发中保留在ViewState
中。 ASP.NET <asp:Label>
呈现为HTML span
而span
没有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;