访问LoginView控件中的Login控件

时间:2012-11-30 12:21:51

标签: asp.net asp.net-membership loginview

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";
        }
    }
}
}

以上显示了我的代码。当我尝试运行它时,它会给我以下错误:

'Login'不包含'UserName'的定义,并且没有扩展方法'UserName'接受类型'Login'的第一个参数(你是否缺少using指令或汇编引用?)

'Login'不包含'FailureText'的定义,并且没有扩展方法'FailureText'接受类型'Login'的第一个参数(你是否缺少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”,因此不会错误地引用它。

提前致谢。 :)

1 个答案:

答案 0 :(得分:1)

最可能的原因是另一个名为Login的页面或用户控件。如果没有名称空间前缀,编译器将解析Login到该页面/控件,而不是System.Web.UI.WebControls.Login控件。