2013-02-22 59 views
0

我有两个实体: 1)学生 和2)地址。如何为两个相关实体创建视图和视图模型

public class Student 
{ 
    Public Int StudentId { get; set; } 
    Public String FullName { get; set; } 

    Public virtual IList<Address> Addresses { get; set; } 
} 

public class Address 
{ 
    Public Int AddressId { get; set; } 
    Public Int StudentId { get; set; } 
    Public String FullAddress { get; set; } 

    Public virtual Student Student { get; set; } 
} 

每个学生可能有零个或多个地址。

我想为这两个实体创建单个视图。我知道必须创建一个视图模型。这是视图模型。

public class StudentViewModel 
{ 
    Public Int StudentId { get; set; } 
    Public String FullName { get; set; } 
    public Address AddAddressModel { get; set; } 

    Public virtual IList<Address> Addresses { get; set; } 
} 

我创建了一个StudentViewModel视图。这是StudentViewModel:

@model MyProject.Models.StudentViewModel 

@{ 
    ViewBag.Title = "Create"; 
} 

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 

    <fieldset> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.FullName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.FullName) 
      @Html.ValidationMessageFor(model => model.FullName) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.AddAddressModel.FullAddress) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.AddAddressModel.FullAddres) 
      @Html.ValidationMessageFor(model => model.AddAddressModel.FullAddres) 
     </div> 

     <button id="add">add address to list</button> 

     <input type="submit" value="save in database" />   
</fieldset> 

请告诉我,我怎么能对一个在StudentViewModel的地址属性添加一个或多个地址,这种操作对用户后显示。最后当我点击“保存数据库”按钮的学生和他的地址必须插入数据库。

回答

1

我在过去提交了嵌套的子实体,但是这总是通过API调用完成的,表单在提交之前被序列化为JSON对象。

因为你只有真正需要多个FullAddress值,你可以相应地改变你的模型和视图(未测试):

型号:

public class StudentViewModel 
{ 
    public int StudentId { get; set; } 
    public string FullName { get; set; } 
    public string[] Addresses { get; set; } 
} 

查看:

在你的看法,当你点击'添加'按钮时,确保(通过JavaScript)你最终得到这样的东西:

<textarea name="Addresses[]">Some Address 1</textarea> 
<textarea name="Addresses[]">Some Address 2</textarea> 
etc... 
+0

谢谢CornéM创建模板,但我想用我的模型。因为我想把这个模型扩展到这样的复杂模型:工厂和他的分支。请告诉我更多关于第一个解决方案:在表单提交之前将表单序列化为JSON对象 – 2013-02-22 13:15:25

+1

嗨,您可以使用此插件将表单序列化为复杂的JSON对象:http://stackoverflow.com/a/8407771/1746803。然后,您可以简单地使用'$ .post()'将对象发送到您的脚本。我已经多次使用这个解决方案和复杂的模型,它还没有让我失望。 – Knelis 2013-02-22 15:04:45

0

你可以尝试使用:

@EditorFor(m => model.Addresses) 

这会为您的地址模型

+0

谢谢,但更大的问题是如何保存地址bofore点击“保存数据库”按钮,并在点击后在数据库中插入这些数据。 – 2013-02-22 13:19:02

+0

是的,当你发布表单时,你应该在yourviewmodel.Addresses.AddressId或yourviewmodel.Addresses.FullAddress下获取值 – Rusty 2013-02-22 13:26:46

+0

如何在表单提交之前添加地址列表? jQuery对我有帮助吗?在创建操作方法后,我想通过编写model.Addresses访问学生地址 – 2013-02-22 13:34:28

相关问题