我正在尝试扩展Simple Membership以包含FirstName,SecondName和Email地址,但是我遇到了CreateUserAndAccount的一些问题。
所以基本上在RegisterModel中我添加了以下内容: -
[Display(Name = "First Name")]
[Required(ErrorMessage = "Text is required")]
public string FirstName { get; set; }
[Display(Name = "Second Name")]
[Required(ErrorMessage = "Text is required")]
public string SecondName { get; set; }
[Display(Name = "Email")]
[Required(ErrorMessage = "Email required")]
[RegularExpression(@"^\w+([-+.]*[\w-]+)*@(\w+([-.]?\w+)){1,}\.\w{2,4}$")]
public string ContactEmail { get; set; }
Register.cshtml中的我添加了用户输入: -
<li>
@Html.LabelFor(m => m.FirstName)
@Html.TextBoxFor(m => m.FirstName)
</li>
<li>
@Html.LabelFor(m => m.SecondName)
@Html.TextBoxFor(m => m.SecondName)
</li>
<li>
@Html.LabelFor(m => m.ContactEmail)
@Html.TextBoxFor(m => m.ContactEmail)
</li>
然后在AccountController.cs中我有以下内容: -
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
var UserInfo =
new
{
FirstName = model.FirstName,
SecondName = model.SecondName,
ContactEmail = model.ContactEmail
};
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, UserInfo);
WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
问题是当它试图做
时WebSecurity.CreateUserAndAccount(model.UserName, model.Password, UserInfo);
我收到以下错误: -
无效的列名'FirstName'。
无效的列名称'SecondName'。
无效的列名称“ContactEmail”。
是否因为没有使用字段创建用户表?如果是,我该如何创建这些字段。我已经有了初始化集
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
非常感谢任何帮助。
由于
的 的 ** * * 更新的 * ** * ** * ** * ** * ** * ** * **
这是UserProfile
public class UserProfile : ProfileBase
{
[Display(Name = "First Name")]
public virtual string FirstName
{
get
{
return (this.GetPropertyValue("FirstName").ToString());
}
set
{
this.SetPropertyValue("FirstName", value);
}
}
[Display(Name = "Last Name")]
public virtual string LastName
{
get
{
return (this.GetPropertyValue("LastName").ToString());
}
set
{
this.SetPropertyValue("LastName", value);
}
}
[Display(Name = "Contact Email")]
public virtual string ContactEmail
{
get
{
return (this.GetPropertyValue("ContactEmail").ToString());
}
set
{
this.SetPropertyValue("ContactEmail", value);
}
}
public static UserProfile GetProfile(string username)
{
return Create(username) as UserProfile;
}
}
答案 0 :(得分:0)
您需要将这三个新字段(FirstName,SecondName和ContactEmail)添加到继承DbContext的UserProfile类。
UserProfile类在您的帐户模型中定义。
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string SecondName { get; set; }
public string ContactEmail { get; set; }
}
确保删除表格,以便删除以前的表格。
答案 1 :(得分:0)
问题是您使用简单的成员身份,因为您对模型执行了这些更改。它导致SimpleMembership使用默认列(id和name)创建UserProfile
表。
在这种情况下,设置autoCreateTables: true
并不会有帮助,因为您的表存在!但他们没有新栏目。
因此,您需要删除这4个表,并让db初始化程序为您创建新的有效表。