我试图让所有用户使用我用属性搜索的用户名。
MembershipUserCollection users = Membership.FindUsersByName(txtSearchName.Text + "%");
datalist1.DataSource = users;
datalist1.DataBind();
//In the datalist
<asp:Label ID="UserName" runat="server" Text='<%# Eval("Username") %>'></asp:Label>
上面的代码很有效,我可以从数据库中键入任何用户名,它就会显示出来。但我还需要我在webconfig中指定的所有配置文件属性,如firstname、lastname等。
var profiles = ProfileManager.GetAllProfiles(ProfileAuthenticationOption.Authenticated)
datalist1.DataSource = profiles;
datalist1.DataBind();
<asp:Label ID="UserName" runat="server" Text='<%# Eval("UserName") %>'></asp:Label>
<asp:Label ID="FirstName" runat="server" Text='<%# Eval("FirstName") %>'></asp:Label>
<asp:Label ID="LastName" runat="server" Text='<%# Eval("LastName") %>'></asp:Label>
您可以通过配置文件提供程序类访问配置文件属性
var profile = ProfileBase.Create(userName);
var firstName = profile["FirstName"] as string;
var lastName = profile["LastName"] as string;
我一直在业务逻辑层中处理这个问题。您需要创建一个自定义类型来扩展配置文件属性,并添加一个UserAccount
属性:
public static Profile GetProfile() {
Profile profile = null;
if (HttpContext.Current.User.Identity.IsAuthenticated) {
var user = Membership.Provider.GetUser(HttpContext.Current.User.Identity.Name, false);
if (user != null) {
// an AD user who is already authed
profile = ReferralsData.GetProfilesByProviderKey(user.UserName) ?? new Profile();
profile.UserAccount = user;
}
}
return profile;
}