【问题标题】:Updating multiple models in ASP.NET MVC在 ASP.NET MVC 中更新多个模型
【发布时间】:2012-10-05 16:02:11
【问题描述】:

我需要从首次在 MVC 3 应用程序中注册的新用户(首先使用 EF 代码)捕获三种不同类型的信息。理想情况下在一页上(将有三个标签)

  1. 用户信息
  2. 扩展用户信息
  3. 用户选择的好处

帐户控制器的注册方法应在触发时填充用户表。我需要一些关于如何最好地捕获其他数据的建议。我是否为附加数据创建了一个 UserDetails 模型?如果是这样,是否可以从同一页面更新? (这将是 Account/Register 页面。我是否需要在帐户控制器中做一些事情,或者模型之间的关系是否足够?

有什么好的例子可以解释这一点吗?我尝试了 MVC Contoso University 之一,但看不到我是否可以这样做。

非常欢迎任何建议:)

谢谢

【问题讨论】:

    标签: asp.net-mvc entity-framework ef-code-first


    【解决方案1】:

    您可以创建一个视图模型,该模型将您需要的其他模型的所有字段组合在一起,并强烈键入您的视图。一旦用户将信息提交回控制器,您将适当地处理每个属性。

    public class RegisterViewModel()
    {
      //Userinfo
      public string UserName {get; set;}
      ...
      //Extended user info
      public string FirstName {get; set;}
      public string LastName{get; set;}
      ...
      //Benefits
      public string BenefitName {get; set;}
      ...
    }
    

    然后

    [HttpPost]
    public ActionResult Register (RegisterViewModel viewModel)
    {
      //grab the user info from the view model and process it
      viewModel.UserName...
    
      //grab the extended info and process it
      viewModel.FirstName...
      //grab the benefit info and process it
      viewModel.BenefitName...
    }
    

    【讨论】:

    • 感谢您的帮助。我尝试了您的建议,但在尝试注册时仍然遇到类似的错误 - 对象引用未设置为对象的实例。 - newuser.UserDetails.Firstname = viewModel.Firstname;
    • 啊,我还没有创建 NewUser 的实例。现在完成所有工作。谢谢ks
    【解决方案2】:

    一个视图只能有一个模型。你可以把你需要的所有信息放在那里。这是最简单的解决方案。您的视图模型不必映射到您在其他地方使用的类,因此您可以在一个模型中拥有用户信息、扩展用户信息和用户选择的好处。

    或者,您可以将其设置为两到三步的过程,但您说您不希望这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多