0

組み込みの ASP.NET メンバーシップ データベース スキーマを使用して、ユーザーとプロファイルを処理しています。System.Web.Profile.ProfileBaseから継承するカスタム プロファイルを作成しました。ソリューション データの一部では、データベースからリストされ、html テーブルにレンダリングされます。このリストの背後にあるコードでは、現在ログインしているユーザーのユーザー名によってフィルター処理されます。

例:

if (usernameString.Equals(MyCustomProfile.UserName))`  
    // add to list

myRepeater.DataSource = myFilteredList;
myRepeater.DataBind();

これはすべてのブラウザで正常に動作します。ただし、一部のテスト済みデバイス: iPad、iPhone、および Internet Explorer 8 では、リストが空になることがあります。私が最初に考えたのは、JavaScript/HTML/CSS 関連の何かがこれを引き起こしたということでした。デバッグ セッションの後、これらのケースでは UserName プロパティの値が大文字であることがわかりました。この値は .NET ProfileBase クラスから取得されるため、カスタムのハンズオンはありません。

組み込みのSystem.Web.Security.Membershipクラスを使用して、同じ比較方法をテストしました。ユーザー名を大文字で返します。

例:

var user = Membership.GetUser();
if (usernameString.Equals(user.UserName))
    // add to list

とりあえずこれを解決するために、ProfileBase の UserName プロパティをオーバーライドしています。

public new string UserName
{
    get
    {
        return base.UserName.ToLower();
    }
}

aspnet_Users 標準テーブルには、ユーザー名を保持する 2 つの列 (UserName と LoweredUserName) があります。データベースを調べると、大文字のユーザー名はありません。それで、これはどのように起こるのですか?

4

0 に答える 0