从嵌入式用户控件获取ClientID

时间:2014-11-03 23:05:16

标签: javascript asp.net user-controls web-user-controls

在页面中,我定义了以下内容:

<%@ Register Src="MyLocationControl.ascx" TagName="MyLocationControl" TagPrefix="uc3" %>

在MyLocationControl.ascx中,我有一个文本框字段,它将包含一些隐藏值,如名称,地址,状态等。

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MyLocationControl.ascx.cs" Inherits="MyLocationControl" %>
<asp:TextBox ID="uxMyLocationDescription" runat="server" Rows="4" TextMode="MultiLine" ReadOnly="true" Width="225px"/>
<asp:HiddenField ID="MyLocationIDField" runat="server" Visible="true" ClientIDMode="Static" />

在.cs中我有

public int LocationID
{
    get { return this.MyLocationIDField.Value == String.Empty ? 0 : Convert.ToInt32(this.MyLocationIDField.Value); }
    set { this.MyLocationIDField.Value = value.ToString(); }
}

我无法访问clientID来为其分配值。

document.getElementById('<%=uc3_MyLocationIDField.ClientID %>').value = "My Value";

但我可以使用以下内容访问文本框...

document.getElementById('MainContentPlaceHolder_uxReservationControl_uxRentalLocation_uxRentalLocationDescription').value = "Put something here";

你能告诉我我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

使用ClientIDMode =&#34;静态&#34;,例如

<asp:TextBox ID="txtName" runat="server" ClientIDMode="Static" />

本文解释更多 http://www.4guysfromrolla.com/articles/031710-1.aspx

答案 1 :(得分:1)

如果您使用的是ASP.NET 4或更高版本,并且您只想要访问一个控件,那么John的解决方案就可以正常运行。

如果没有,你仍然可以使它工作。这个问题: -

document.getElementById('<%=uc3_MyLocationIDField.ClientID %>').value = "My Value";

是您尝试使用生成的ClientID来访问服务器端控件 - MyLocationIDField - uc3_MyLocationIDField。这也行不通,生成的ID每次渲染时都不保证一致。

使用&lt;%= ..%&gt;的重点语法是你引用服务器端代码,所以这应该工作,但是 -

document.getElementById('<%=MyLocationIDField.ClientID %>').value = "My Value";