HTML:
<body>
<form id="form1" runat="server">
<div>
<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>
<asp:Login ID="Login1" runat="server" OnLoginError="LoginError">
</asp:Login>
</AnonymousTemplate>
<LoggedInTemplate>
Username:
<asp:LoginName ID="LoginName1" runat="server" />
</LoggedInTemplate>
</asp:LoginView>
</div>
</form>
代码隐藏:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.Security;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void LoginError(object sender, EventArgs e)
{
Login Login1 = (Login)LoginView1.FindControl("Login1");
string userName= Login1.UserName;
MembershipUser user = Membership.GetUser(userName);
if (user == null)
{
Login1.FailureText = "Username Invalid";
}
else
{
if (!user.IsApproved)
{
Login1.FailureText = "User Not Yet Approved";
}
else if (user.IsLockedOut)
{
Login1.FailureText = "User Locked Out";
}
}
}
}
上面显示了我的代码。当我尝试运行它时,它给了我以下错误:
“登录”不包含“用户名”的定义,并且找不到接受“登录”类型的第一个参数的扩展方法“用户名”(您是否缺少 using 指令或程序集引用?)
“Login”不包含“FailureText”的定义,并且找不到接受“Login”类型的第一个参数的扩展方法“FailureText”(您是否缺少 using 指令或程序集引用?)
注意我已经包含了 System.Web.UI.WebControls 参考。
但是,如果我明确地对 Login 控件进行类型转换,则代码开始工作:
System.Web.UI.WebControls.Login Login1 = (System.Web.UI.WebControls.Login)LoginView1.FindControl("Login1");
谁能解释为什么会这样?在第一种情况下,如果我将鼠标悬停在 Login 关键字上,它会显示“class System.Web.UI.WebControls.Login”,因此它不会被错误地引用。
提前致谢。:)