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」が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)
「Login」には「FailureText」の定義が含まれておらず、「Login」タイプの最初の引数を受け入れる拡張メソッド「FailureText」が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)
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」と表示されるため、誤って参照されることはありません。
前もって感謝します。:)