在页面中,我定义了以下内容:
<%@ 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";
你能告诉我我错过了什么吗?
答案 0 :(得分:1)
使用ClientIDMode =&#34;静态&#34;,例如
<asp:TextBox ID="txtName" runat="server" ClientIDMode="Static" />
答案 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";