【问题标题】:Multiple model binding in single view MVC单视图 MVC 中的多个模型绑定
【发布时间】:2016-01-19 17:00:53
【问题描述】:

我是 MVC 新手,请帮帮我。

我必须在我的应用程序中管理员工的个人资料。所以我创建了 3 个模型

DetailPersonal(包含字段 - 名字、中间名、姓氏、出生日期)

DetailAddress(包含字段 - AddressLine1、AddressLine2、City、State 等)

DetailContact(包含字段-Primary Mobile no.,Secondary Mobile No, Off. No.等)

我可以为这些模型创建一个视图并进行 ajax 发布吗?

我想在个人标签中显示这些 ||地址 ||联系方式

【问题讨论】:

    标签: c# jquery model-view-controller


    【解决方案1】:

    最简洁的方法是创建一个具有三个属性的新类,并将其用作您的模型。

    或者,如果您不想这样做,可以使用对象列表:

    @model List<object>
    @{
      var detailPersonal = Model[0] as DetailPersonal;
      var detailAddress = Model[1] as DetailAddress;
      var detailContact = Model[2] as DetailContact;
    }
    

    并从控制器传递所有三个:

    View(new object[] {MyDetailPersonal, MyDetailAddress, MyDetailContact})
    

    但它可能更容易出错。

    【讨论】:

      【解决方案2】:

      这种情况很常见,因为您定义了在呈现给用户之前需要组合的类。

      通常,这是通过使用视图模型将单独的类合并为最终用户可以修改的内容来处理的。实体对象和视图模型之间的转换可以在简单应用程序的构造函数中完成。

      我会看看这个: What is ViewModel in MVC?

      另外,如果您想引入更多复杂性,我会阅读存储库模式,并查看域层。这两个主题处理您所面临的情况。

      【讨论】:

        【解决方案3】:

        用户会使用一个表单(共享提交按钮)提交所有三个模型的内容吗?我认为这是最有意义的,除非在某些情况下需要 AJAX。如果我是对的,这就是你会做的。

        创建具有三个模型类型属性的新模型。我们称之为 CustomerModel。

        public class CustomerModel
        {
            [DisplayName("Address")]
            public DetailAddress AddressDetails { get; set; }
        
            [DisplayName("Contact information")]
            public DetailContact ContactDetails { get; set; }
        
            [DisplayName("Personal information")]
            public DetailPersonal PersonalDetails { get; set; }
        }
        

        然后在框架定义的文件夹中创建编辑器模板。这些包含每个模型的可编辑字段。

        • ~/Views/Shared/EditorTemplates/DetailAddress.cshtml
        • ~/Views/Shared/EditorTemplates/DetailContact.cshtml
        • ~/Views/Shared/EditorTemplates/DetailPersonal.cshtml

        然后将编辑器添加到您的主窗体中。比如……

        @using (Html.BeginForm())
        {
            <div id="addressDetailsTab">
                @Html.LabelFor(model => model.AddressDetails)
                @Html.EditorFor(model => model.AddressDetails)
            </div>
            <div id="contactDetailsTab">
                @Html.LabelFor(model => model.ContactDetails)
                @Html.EditorFor(model => model.ContactDetails)
            </div>
            <div id="personalDetailsTab">
                @Html.LabelFor(model => model.PersonalDetails)
                @Html.EditorFor(model => model.PersonalDetails)
            </div>
            <input type="submit" value="Submit" />
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-06-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-16
          • 2013-02-27
          • 1970-01-01
          相关资源
          最近更新 更多