跨页回发后Control.UniqueID不同
Posted
技术标签:
【中文标题】跨页回发后Control.UniqueID不同【英文标题】:Control.UniqueID different after cross-page postback 【发布时间】:2012-10-27 23:54:56 【问题描述】:我有一个带有 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 的页面都存在的问题。它们中的大多数都可以正常工作并在渲染和Page_Load
中使用ctl0$txtUserName
和ctl0$txtPassword
。
知道什么可能导致 ASP.NET 为控件呈现不同于 Page_Load
中使用的 UniqueID
吗?
【问题讨论】:
【参考方案1】:我仍然不确定是什么导致 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 怪异问题的人!
【讨论】:
【参考方案2】:我刚刚意识到的奇怪的怪癖:运行在服务器上的任何包装控件也必须具有 ID。例如,如果您在控件周围有一个面板,即无论“ctl00”是什么,都必须为其分配一个 ID。如果未设置,则会分配一个,并且可以更改。
【讨论】:
以上是关于跨页回发后Control.UniqueID不同的主要内容,如果未能解决你的问题,请参考以下文章
Asp.Net jQuery $.getJSON 有时会导致整页回发?