我正在使用 Visual Studio 中的 ASP.Net MVC 5。我想创建一个具有复杂类型的用户配置文件。我修改了 IdentityModels.cs
文件中 User
类的代码。代码如下:
public class User : IUser
{
public User()
: this(String.Empty)
{
}
public User(string userName)
{
UserName = userName;
Id = Guid.NewGuid().ToString();
}
[Key]
public string Id { get; set; }
public string UserName { get; set; }
public string Phone { get; set; }
public string MobilePhone { get; set; }
public string Email { get; set; }
public string Address { get; set; }
}
我还更改了此模型的 View 。这效果很好,没有任何问题。但是,如果我将上面的 Address
属性的类型更改为 Address
,则意味着: public Address Address { get;放; }
它失败了。
我尝试使用virtual
关键字,但没有成功。请注意,每次我都从头开始创建数据库表。另外,我检查了数据库,信息已使用正确的外键插入到数据库中,但我不知道问题是什么。
以下代码中的代码执行失败,在返回 false
的 await Users.Create(user)
行中:
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
try
{
// Create a profile, password, and link the local login before signing in the user
User user = new User(model.UserName)
{
UserAddress = model.Address,
Email = model.Email,
Phone = model.Phone,
MobilePhone = model.MobilePhone
};
if (await Users.Create(user) &&
await Secrets.Create(new UserSecret(model.UserName, model.Password)) &&
await Logins.Add(new UserLogin(user.Id, IdentityConfig.LocalLoginProvider, model.UserName)))
{
await SignIn(user.Id, isPersistent: false);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError(String.Empty, "Failed to create login for: " + model.UserName);
}
}
catch (DbEntityValidationException e)
{
ModelState.AddModelError("", e.EntityValidationErrors.First().ValidationErrors.First().ErrorMessage);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
更新:
如果您想知道的话,这是 Address
类:
public class Address
{
public int ID { get; set; }
[Required]
public string Country { get; set; }
[Required]
public string City { get; set; }
[Required]
public string Street { get; set; }
[Required]
public string PostalCode { get; set; }
}
更新2
这是输入数据的图像:
最佳答案
看来这是一个错误。在得到绝对证明之前我不会选择它作为答案。但是,当我更改 Controller 的代码时:
if (await Users.Create(user) &&
await Secrets.Create...
至:
await Users.Create(user);
if (await Secrets.Create...
它可以正常工作,没有任何问题。在我看来,这应该是一个错误,因为我可以完美地加载和编辑数据。
这意味着,由于某种原因,即使 IUserStore.Create
成功,如果模型是复杂类型,它也会返回 false。
关于asp.net-mvc - 如果用户具有复杂类型,MVC 用户存储的 IUserStore.Create 会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18033548/