2012-11-30 100 views
0

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'的定義,並且沒有找到接受'Login'類型的第一個參數的擴展方法'UserName' )

'Login'不包含'FailureText'的定義,也沒有找到接受'Login'類型的第一個參數的擴展方法'FailureText'(你是不是缺少使用指令或程序集引用?)

注意我已經包含了System.Web.UI.WebControls引用。

的代碼開始。但是,工作,如果我明確的類型轉換登錄控制:

System.Web.UI.WebControls.Login Login1 = (System.Web.UI.WebControls.Login)LoginView1.FindControl("Login1"); 

任何人都可以請解釋爲什麼會這樣?在第一種情況下,如果我將鼠標懸停在Login關鍵字上,它會顯示「class System.Web.UI.WebControls.Login」,以免引用錯誤。

在此先感謝。 :)

+1

你有另外一個'Page'或'UserControl'叫做'Login'嗎? –

+0

我有另一個頁面,稱爲登錄,並刪除,這開始工作。但我仍然不明白爲什麼錯誤? – Fahad

+1

因爲沒有命名空間前綴的'Login'解析爲您的'Login'頁面,而不是'System.Web.UI.WebControls.Login'控件。 Visual Studio中的工具提示可能使用了過時的智能感知緩存。 –

回答

1

最有可能的原因是另一個頁面或用戶控件Login。如果沒有名稱空間前綴,編譯器會將Login解析爲該頁面/控件,而不是System.Web.UI.WebControls.Login控件。