单视图中的多个模型绑定MVC

时间:2016-01-19 17:00:53

标签: c# jquery model-view-controller

我是MVC的新手,请帮帮我。

我必须在我的应用程序中管理Employee的配置文件。所以我创建了3个模型

DetailPersonal(包含字段 - 名字,中间名,姓氏,DOB)

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

DetailContact(包含字段 - 主要移动号码,辅助移动号码,关闭号码等)

我可以为这些模型创建单个视图并执行ajax发布。

我想在Like Personal ||标签中显示这些内容地址||接触

3 个答案:

答案 0 :(得分:0)

最干净的方法是创建一个包含三个属性的新类,并将其用作模型。

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

@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})

但它可能更容易出错。

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

用户是否会使用单一表单(共享提交按钮)提交所有三个模型的内容?我认为这是最有意义的,除非有些情况需要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; }
}

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

  • 〜/查看/共享/ EditorTemplates / DetailAddress.cshtml
  • 〜/查看/共享/ EditorTemplates / DetailContact.cshtml
  • 〜/查看/共享/ 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" />
}