-1

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

<%@ 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";

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

4

2 回答 2

1

如果您使用的是 ASP.NET 4 或更高版本,并且您只想访问一个控件,那么 John 的解决方案将起作用。

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

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

是您正在尝试访问服务器端控件 - MyLocationIDField - 使用为其生成的 ClientID - uc3_MyLocationIDField。这将不起作用,而且生成的 ID 不能保证每次渲染时都相同。

使用 <%= .. %> 语法的要点是您正在引用服务器端代码,所以这应该可以工作,但是 -

document.getElementById('<%=MyLocationIDField.ClientID %>').value = "My Value";
于 2014-11-03T23:53:11.840 回答
1

使用 ClientIDMode="Static",例如

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

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

于 2014-11-03T23:18:15.647 回答