在我的asp.net项目中有一个母版页,并且Contentplaceholder1上有一个控件。在我的本地渲染后更改此控件的id,如“ctl00_Contentplaceholder1_control”。但在服务器上它的变化就像“Contentplaceholder1_control”。当我使用documents.getelelentbyid('ctl00_Contentplaceholder1_control')
js函数时,它在我的本地工作但不在服务器上工作。那么为什么app在服务器上运行时会消失“ctl00_”?
编辑:
为什么服务器端控件id在渲染后不包含“ctl00_”?
答案 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)
我的托管服务器将他们的asp.net服务器更改为asp.net 4服务器。所以我的控件没有“ctl00_”呈现。我将.net 3.5项目编译为.net 4和I changed web.config file like this。
现在正在运作。