跨页回发后Control.UniqueID不同

时间:2012-11-07 20:50:22

标签: asp.net unique-id

我有一个带有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$txtUserNamectl0$txtPassword)!

请注意,在使用此MasterPage的所有网页上,这似乎不是问题。他们中的大多数都正常工作,并在渲染和ctl0$txtUserName中使用ctl0$txtPasswordPage_Load

知道什么可能导致ASP.NET为控件呈现不同于UniqueID中使用的Page_Load

2 个答案:

答案 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。如果没有设置,它将被分配一个,这可以改变。