渲染后的母版页控件ID

时间:2011-07-05 14:03:44

标签: javascript .net asp.net vb.net master-pages

在我的asp.net项目中有一个母版页,并且Contentplaceholder1上有一个控件。在我的本地渲染后更改此控件的id,如“ctl00_Contentplaceholder1_control”。但在服务器上它的变化就像“Contentplaceholder1_control”。当我使用documents.getelelentbyid('ctl00_Contentplaceholder1_control') js函数时,它在我的本地工作但不在服务器上工作。那么为什么app在服务器上运行时会消失“ctl00_”?

编辑:

为什么服务器端控件id在渲染后不包含“ctl00_”?

5 个答案:

答案 0 :(得分:2)

使用服务器端属性ClientID获取相应的ID,或者如果您使用的是.NET 4,请使用ClientIDMode

答案 1 :(得分:1)

为什么不使用ClientIDMode制作静态ID?您使用的是哪个版本的.NET Framework?

另一个选项(对于旧版本)是将.NET控件包装在具有静态id的div中,然后像这样使用jQuery:

 var wrapper = $('#wrapperDivId');
 var control = wrapper.find('typeOfControl')[0];

这样,无论您的控件的id如何呈现,您都可以随时访问它。

例如,TextBoxes呈现给<input type='text' />。现在,您可以将文本框包装在div中,如下所示:

 <div id='wrapper'>
      <asp:TextBox ID='firstName' runat='server' />
 </div>

现在,无论客户端ID如何,您都可以使用以下方式在客户端获取文本框:

 $('#wrapper input')

答案 2 :(得分:1)

你应该这样做......

documents.getElelentbyid('<%=ControlID.ClientID %>') 

答案 3 :(得分:0)

document.getElementById("<%= control.ClientID %>");

这比硬编码客户端ID更安全,更好。

答案 4 :(得分:0)

Answer is here

我的托管服务器将他们的asp.net服务器更改为asp.net 4服务器。所以我的控件没有“ctl00_”呈现。我将.net 3.5项目编译为.net 4和I changed web.config file like this

现在正在运作。