2

我有一个带有 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$txtUserNamectl0$txtPassword在渲染和Page_Load.

知道什么可能导致 ASP.NETUniqueID为控件呈现不同于它在中使用的控件Page_Load吗?

4

2 回答 2

0

我仍然不确定是什么导致 MasterPage 中生成的 UniqueID 在 Page_Load 中与呈现到页面时不同。但是,我能够通过将这些字段的 UniqueID 存储在隐藏字段中来解决这个问题。然后我可以直接访问 Request.Form 集合中的值。

换句话说,我这样做了:

在母版页中 -

<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 怪异问题的人!

于 2012-11-28T14:54:38.597 回答
0

我刚刚意识到的奇怪怪癖:运行在服务器上的任何包装控件也必须具有 ID。例如,如果您在控件周围有一个面板,即无论“ctl00”是什么,都必须为其分配一个ID。如果没有设置,它将被分配一个,这可以改变。

于 2015-08-20T11:04:30.313 回答