組み込みの 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) があります。データベースを調べると、大文字のユーザー名はありません。それで、これはどのように起こるのですか?