我的模特是:
public class ContactInfo
{
public IEnumerable<SupplierContact> PriceRequest { get; set; }
public IEnumerable<SupplierContact> OrderConfirmation { get; set; }
public IEnumerable<SupplierContact> Account { get; set; }
}
public class SupplierContact
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Title { get; set; }
public string Email { get; set; }
public string MobilePhone { get; set; }
}
我的控制器操作是
public ActionResult EditContactInfo(ContactInfo contactInfo)
{
// not getting any values here..
}
视图渲染如下:
@foreach (SupplierContact PriceRequest in Model.PriceRequest)
{
<tr class="">
<td style="text-align: left;" class="csstd-left">@Html.TextBoxFor(m => PriceRequest.Email)</td>
<td class="csstd">@Html.TextBoxFor(m => PriceRequest.MobilePhone)</td>
<td class="csstd">@PriceRequest.Title</td>
<td class="csstd">@PriceRequest.FirstName</td>
<td class="csstd">@PriceRequest.LastName</td>
</tr>
}
我在视图中引用@model ContactInfo
但是我可以使用
来实现它Request.Form.Get("PriceRequest.Email")
但我想使用模型绑定功能。
答案 0 :(得分:1)
您需要使用for
循环(并且您需要将集合从IEnumerable
更改为IList
,并将name
属性正确编入索引
@for (int i = 0; i < Model.PriceRequest.Count; i++) {
@Html.TextBoxFor(m => Model.PriceRequest[0].Email)
@Html.TextBoxFor(m => Model.PriceRequest[i].MobilePhone)
}
或者,您可以为EditorTemplate
创建SupplierContact
并使用
@Html.EditorFor(m => m.PriceRequest)
这将生成类似
的html<input name="PriceRequest[0].Email" ...
<input name="PriceRequest[0].MobilePhone" ...
<input name="PriceRequest[1].Email" ...
<input name="PriceRequest[2].MobilePhone" ...
等
答案 1 :(得分:0)
查看显示和编辑器模板。您可以创建名为SupplierContact
的视图。如果他看到复杂的类型,MVC会自动知道要显示的内容。
因此,在views文件夹中创建一个文件夹:DisplayTemplates。 然后创建一个名为SupplierContact的局部视图。 将部分视图的模型设置为SupplierContact。 创建用于再次显示和运行应用程序的标签。
要进行编辑,请创建一个EditorTemplates文件夹。