我有两个实体: 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的地址属性中添加一个或多个地址,并在此操作后显示给用户。最后当我点击“保存在数据库中”按钮时,学生和他的地址必须插入数据库。
答案 0 :(得分: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...
答案 1 :(得分:0)
您可以尝试使用:
@EditorFor(m => model.Addresses)
这将为您的地址模型创建模板