我使用内置的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标准表有两列保存用户名:UserName和LoweredUserName。查看数据库没有大写的用户名。那怎么会发生?