如何实现复杂类型的模型绑定
本文关键字:类型 模型 绑定 复杂 何实现 实现 | 更新日期: 2023-09-27 18:20:23
我的模型是:
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")
但我想使用模型绑定功能。
您需要使用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)
}
或者,您可以为SupplierContact
创建一个EditorTemplate
并使用
@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" ...
等等。
看看显示和编辑器模板。然后您可以创建一个名为SupplierContact
的视图。MVC自动知道如果他看到复杂的类型,该显示什么。
请参见此示例:http://www.asp.net/mvc/tutorials/javascript/using-the-html5-and-jquery-ui-datepicker-popup-calendar-with-aspnet-mvc/using-the-html5-and-jquery-ui-datepicker-popup-calendar-with-aspnet-mvc-part-2
因此,在视图文件夹中创建一个文件夹:DisplayTemplates。然后创建一个名为SupplierContact的局部视图。将局部视图的模型设置为SupplierContact。创建用于显示的标签,然后再次运行应用程序。
要进行编辑,请创建EditorTemplates文件夹。