完成后使用(CreateUserWizard控件)创建用户在同一进程中添加配置文件信息

时间:2013-07-22 22:05:28

标签: asp.net login-control

当我尝试此代码时,它会显示此错误信息

无法为匿名用户设置此属性。

protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
    Roles.AddUserToRole((sender as CreateUserWizard).UserName, "Admin");

    Control ctrl = CreateUserWizard1.CreateUserStep.ContentTemplateContainer;
    TextBox txtAdminAddress= (TextBox)ctrl.FindControl("txtAdminAddress");
    TextBox txtAdminCountry= (TextBox)ctrl.FindControl("txtAdminCountry");
    TextBox txtAdminCity= (TextBox)ctrl.FindControl("txtAdminCity");

    HttpContext.Current.Profile.GetProfileGroup("AdminGroup").SetPropertyValue("AdminAddress", txtAdminAddress.Text);
    HttpContext.Current.Profile.GetProfileGroup("AdminGroup").SetPropertyValue("AdminCountry", txtAdminCountry.Text);
    HttpContext.Current.Profile.GetProfileGroup("AdminGroup").SetPropertyValue("AdminCity", txtAdminCity.Text);
    HttpContext.Current.Profile.Save();

}

配置:

<profile defaultProvider="AspNetSqlProfileProvider"> 
  <properties> 
    <group name="AdminGroup"> 
      <add name="AdminAddress" type="System.String"/> 
      <add name="AdminCountry" type="System.String"/> 
      <add name="AdminCity" type="System.String"/> 
    </group> 
  </properties> 
  <providers> 
     <clear/> 
     <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="MyConnectionString" applicationName="/"/> 
  </providers> 
</profile>

1 个答案:

答案 0 :(得分:1)

创建用户后,您需要获取最近创建的用户的配置文件以开始更新值。由于没有加载配置文件,因此不允许为匿名用户设置这些值。

string strUsername = (sender as CreateUserWizard).UserName;
ProfileCommon p = Profile.GetProfile(strUsername);

//update the field and save
p.AdminAddress= txtAdminAddress.Text;
p.Save();

ProfileBase对象(由Page.Profile属性提供)包括一个有用的GetProfile()函数,该函数按用户名检索特定用户的配置文件信息。

GetProfile()会返回ProfileCommon个对象。

[注意:Config文件中设置的配置文件属性不允许为匿名用户设置值。如果您想为匿名用户允许此操作,请使用:

<add name="AdminAddress" type="System.String" allowAnonymous="true"/>