asp.net-mvc - 如果用户具有复杂类型,MVC 用户存储的 IUserStore.Create 会失败

标签 asp.net-mvc visual-studio-2013 asp.net-mvc-5 asp.net-identity

我正在使用 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关键字,但没有成功。请注意,每次我都从头开始创建数据库表。另外,我检查了数据库,信息已使用正确的外键插入到数据库中,但我不知道问题是什么。

以下代码中的代码执行失败,在返回 falseawait 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

这是输入数据的图像: enter image description here

最佳答案

看来这是一个错误。在得到绝对证明之前我不会选择它作为答案。但是,当我更改 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/

相关文章:

asp.net-mvc - ASP.NET MVC 与时代精神

wpf - 什么是 Visual Studio 的字体缓存文件夹?

asp.net-mvc - 如何设置 ASP.NET Identity 以使用我自己的连接字符串?

c# - 没有 OWIN 身份验证管理器与请求关联

html - 在 Razor/MVC3 中输出带引号的 HTML 属性/文本的正确方法是什么?

c# - MVC 4 默认参数值

configuration - 在 Visual Studio 2013 中禁用 "Auto ID elements"

visual-studio-2013 - Visual Studio 2013 和 Qt5 : QTDIR set too late

c# - 是否保证调用 ActionFilterAttribute 的所有阶段?

c# - 如何从我的 MVC 应用程序访问 OneDrive for Business