Rya*_*ndy 23 .net c# asp.net defaultbutton login-control
我有一个带有Login控件的ASP.NET网页.当我按Enter键时,"登录"按钮不会触发; 而是页面提交,什么都不做.
我在网上找到的标准解决方案是将Login控件封装在Panel中,然后设置Panel默认按钮.但是,如果页面有母版页,那么显然效果不佳.我已经尝试在控件 .ID,控制 .ClientID和控制 .UniqueID的代码中设置默认按钮,并且在每种情况下我得到:
panelName的DefaultButton必须是IButtonControl类型的控件的ID.
我确信有一种方法可以使用JavaScript来实现这一点,但如果可能的话,我真的很想用普通的旧C#代码来实现.可能吗?
Vas*_*kov 34
这应该是有用的:http://weblogs.asp.net/jgalloway/archive/2007/10/03/asp-net-setting-the-defaultbutton-for-a-login-control.aspx
您可以使用以下内容引用Login控件模板中的按钮:
DefaultButton="Login$LoginButton"
Run Code Online (Sandbox Code Playgroud)
基本上,您不仅可以在表单级别定义DefaultButton,还可以在单个Panel级别定义DefaultButton,只要焦点在面板内,如果您点击"Enter",将使用面板的默认按钮
Blend Master的精彩回答!基本上只是使用Panel.DefaultButton,但我想澄清你需要将它设置为什么的混乱.它不只是".ID"或".UniqueID" - 文档有点缺乏.
您必须将其设置为相对于 Panel的命名容器UniqueID 的按钮的UniqueID.例如,如果您的面板UniqueID是"Body $ Content $ pnlLogin",并且您的登录按钮的UniqueID是"Body $ Content $ ucLogin $ btnLogin"(因为它位于名为"ucLogin"的控件内),那么您需要将Panel.DefaultButton设置为"ucLogin $ btnLogin".
您可以在代码中解决此问题,如下所示.(我找不到任何类库方法,但如果你找到一个,请告诉我.)
void SetDefaultButton(Panel panel, IButtonControl button)
{
string uniqueId = ((Control)button).UniqueID;
string panelIdPrefix = panel.NamingContainer.UniqueID + Page.IdSeparator;
if (uniqueId.StartsWith(panelIdPrefix))
{
uniqueId = uniqueId.Substring(panelIdPrefix.Length);
}
panel.DefaultButton = uniqueId;
}
Run Code Online (Sandbox Code Playgroud)