日期:2014-05-19  浏览次数:20417 次

请问关于使用母版页后,控件名称自动生成的问题
大家好,我刚从ASP转到   .Net来,可能问的问题比较弱智一点
以前用ASP使用了很多include文件,比如header,footer等等
在.Net   2.0里面,我看到有母版页的方式和这个很像

现在遇到一个问题,我在母版页里定义的form为
<form   id= "form1 "   runat= "server "> ... </form>

里面有很多控件,随便举个例子比如
<asp:TextBox   ID= "txtEmail "   runat= "server "> </asp:TextBox>

但是页面打开以后,就变成了
<form   name= "aspnetForm "   method= "post "   action= "welcome.aspx "   id= "aspnetForm "> ... </form>

<input   name= "ctl00$MainContent$txtEmail "   type= "text "   id= "ctl00_MainContent_txtEmail "   />

我的页面里有很多Javascript脚本使用这些控件
包括布局,验证,联动等等
现在名字自动全变了,我该怎么办?


------解决方案--------------------
呵呵,是这样的,其实也有一定规律的.
ctl00$MainContent$txtEmail


MainContent--母版页名
txtEmail-----TextBox名
------解决方案--------------------
你就把这些名字记下来呗比如ctl00_MainContent_txtEmail,一般你控件ID和母版页不变的话,这些ID都不变的
------解决方案--------------------
说错.
MainContent-- <asp:Content /> 名
------解决方案--------------------
用控件的ClientID属性
在JavaScript中这样使用:
var email = document.getElementById( ' <%= txtEmail.ClientID %> ');
------解决方案--------------------
你设置好页面的ID。以后不改的话。生成出来的ID是固定了。
------解决方案--------------------
用Control.UniqueID来获取它生成的name属性,用Control.ClientID来获取它生成的id属性。

例如有一个TextBox1,那么TextBox1.ClientID就是生成的 <input /> 的id属性了。
------解决方案--------------------
刚试了一下, babyrockxray(Game~Over) 的方法好用
多谢

顺路搭一个问题
我看别人在welcome.aspx页面里手动写一个
<asp:TextBox ID= "txtEmail " runat= "server "> </asp:TextBox>

切换到welcome.aspx.cs页面的时候,会自动生成一个定义
protected System.Web.UI.WebControls.TextBox txtEmail

我这里为什么不行啊,是不是需要在哪里设置一下?
----------------
VS 2003 才这样
VS 2005 没有了。
------解决方案--------------------
应该是没有的把 看不到的
------解决方案--------------------
2005没有了,如果你要在子模版里面访问master的控件你要这样子

if(Page.Master!=null)
{
Page.Master.FindControl( "控件名 ")
}