Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单视图MVC中的多模型绑定_C#_Jquery_Model View Controller - Fatal编程技术网

C# 单视图MVC中的多模型绑定

C# 单视图MVC中的多模型绑定,c#,jquery,model-view-controller,C#,Jquery,Model View Controller,我是MVC新手,请帮我解决这个问题 我必须在我的应用程序中管理员工的个人资料 DetailPersonal(包含字段-名字、中间名、姓氏、DOB) DetailAddress(包含字段-AddressLine1、AddressLine2、城市、州等) 详细联系人(包含字段主手机号、辅助手机号、关机号等) 我可以为这些模型创建一个视图并进行ajax发布吗 我想在诸如Personal | | | Address | | Contact等选项卡中显示这些属性最干净的方法是创建一个具有三个属性的新类,并

我是MVC新手,请帮我解决这个问题

我必须在我的应用程序中管理员工的个人资料

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

DetailAddress(包含字段-AddressLine1、AddressLine2、城市、州等)

详细联系人(包含字段主手机号、辅助手机号、关机号等)

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


我想在诸如Personal | | | Address | | Contact等选项卡中显示这些属性

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

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

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

但是它可能更容易出错。

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

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

我会看看这个:


另外,如果您想介绍更复杂的内容,我将阅读存储库模式,并查找域层。这两个主题处理您面临的情况。

用户是否会使用单一表单(共享提交按钮)提交所有三个模型的内容?我认为这是最有意义的,除非有必要使用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" />
}
@使用(Html.BeginForm())
{
@LabelFor(model=>model.AddressDetails)
@EditorFor(model=>model.AddressDetails)
@LabelFor(model=>model.ContactDetails)
@EditorFor(model=>model.ContactDetails)
@LabelFor(model=>model.PersonalDetails)
@EditorFor(model=>model.PersonalDetails)
}
@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" />
}