如何实现复杂类型的模型绑定

本文关键字:类型 模型 绑定 复杂 何实现 实现 | 更新日期: 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文件夹。