我有一个带有MasterPage的简单ASP.NET页面。在MasterPage中,我有两个登录字段:
<input type="text" runat="server" id="txtUserName"/>
<input type="text" runat="server" id="txtPassword"/>
当控件呈现给页面时,ASP.NET呈现以下内容:
<input type="text" runat="server" id="ctl00_txtUserName" name="ctl00$txtUserName"/>
<input type="text" runat="server" id="ctl00_txtPassword" name="ctl00$txtPassword"/>
如果我理解正确,name
属性对应于控件的UniqueID
属性。但是,当我调试Page_Load
并尝试查看这些字段的UniqueID
时,它们会有不同的值(分别为ctl0$txtUserName
和ctl0$txtPassword
)!
请注意,在使用此MasterPage的所有网页上,这似乎不是问题。他们中的大多数都正常工作,并在渲染和ctl0$txtUserName
中使用ctl0$txtPassword
和Page_Load
。
知道什么可能导致ASP.NET为控件呈现不同于UniqueID
中使用的Page_Load
?
答案 0 :(得分:0)
我仍然不确定是什么导致MasterPage中生成的UniqueID在Page_Load中与呈现到页面时不同。但是,通过将这些字段的UniqueID存储在隐藏字段中,我能够解决这个问题。然后,我可以直接在Request.Form集合中访问这些值。
换句话说,我这样做了:
在MasterPage中 -
<input type="text" runat="server" id="txtUserName"/>
<input type="text" runat="server" id="txtPassword"/>
<input type="hidden" id="txtUserNameUID" value="<%=txtUserName.UniqueID%>"/>
<input type="hidden" id="txtPasswordUID" value="<%=txtPassword.UniqueID%>"/>
在子页面的Page_Load期间 -
string username = Request.Form[Request.Form["txtUserNameUID"]];
string password = Request.Form[Request.Form["txtPasswordUID"]];
希望这可以帮助其他任何在ASP.NET中遇到UniqueID怪异的人!
答案 1 :(得分:0)
奇怪的怪癖我刚才意识到:runat服务器的任何包装控件也必须有ID。例如,如果控件周围有一个面板,即“ctl00”,则必须为其分配一个ID。如果没有设置,它将被分配一个,这可以改变。