我使用ProfileBase创建了一个自定义Profile类,但是我在插入信息时遇到了问题。我使用asp的注册向导创建了一个用户,在我的CreateUserWizard1_CreatedUser方法中,我编写了代码,用于在Profile中添加信息。
ProfileUser pc = ProfileUser.GetUserProfile(UserName);
pc.FirstName = name.Text;
pc.LastName = lastname.Text;
pc.Save();
我的ProfileUser自定义类是:
namespace CancerApp
{
public class ProfileUser : ProfileBase
{
[SettingsAllowAnonymous(false)]
public string FirstName
{
get { return base["FirstName"] as string; }
set { base["FirstName"] = value; }
}
[SettingsAllowAnonymous(false)]
public string LastName
{
get { return base["LastName"] as string; }
set { base["LastName"] = value; }
}
public static ProfileUser GetUserProfile(string username)
{
return Create(username) as ProfileUser;
}
public static ProfileUser GetUserProfile()
{
return Create(Membership.GetUser().UserName) as ProfileUser;
}
}
}
我的Web.config:
<profile inherits="CancerApp.ProfileUser">
<providers>
<clear />
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" />
</providers>
</profile>
有什么问题? 当pc.Save()运行时,在aspnet_Users表中使用不同的ApplicationID和UserId创建重复信息。
任何想法?
更新: 这只发生在我发布应用程序时,但是当我使用启动调试时,一切都好了
答案 0 :(得分:1)
配置文件和成员资格应用程序名称在web.config文件中应该相同:
<profile defaultProvider="SqlProvider" inherits="YourNamespace.AccountProfile">
<providers>
<clear />
<add name="SqlProvider"
type="System.Web.Profile.SqlProfileProvider"
connectionStringName="memConnStr"
**applicationName="MyApplication"/>**
</providers>
</profile>
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add
name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="memConnStr"
**applicationName="MyApplication"**
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
minRequiredNonalphanumericCharacters="0"
passwordFormat="Hashed" />
</providers>
</membership>
答案 1 :(得分:0)
今天我就解决了这个问题。它创建了另一个用户,因为他没有为应用程序指定名称。
绝对有必要为配置文件功能正确分配名称的应用程序。由于没有名称,系统会自动从应用程序创建名称,并且有创建另一个ApplicationId的原因。