首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现复杂类型的模型绑定

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

Stack Overflow用户
提问于 2014-09-01 11:21:00
回答 2查看 38关注 0票数 0

我的模型是:

代码语言:javascript
复制
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; }

    }

我的主计长的行动是

代码语言:javascript
复制
public ActionResult EditContactInfo(ContactInfo contactInfo)
{
// not getting any values here..
}

视图呈现如下:

代码语言:javascript
复制
 @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

不过,我可以用

代码语言:javascript
复制
Request.Form.Get("PriceRequest.Email")

但是我想使用模型绑定特性。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-01 11:26:44

您需要使用for循环(并且需要将集合从IEnumerable更改为IList,以正确索引name属性)。

代码语言:javascript
复制
@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,并使用

代码语言:javascript
复制
@Html.EditorFor(m => m.PriceRequest)

这将生成类似于

代码语言:javascript
复制
<input name="PriceRequest[0].Email" ...
<input name="PriceRequest[0].MobilePhone" ...
<input name="PriceRequest[1].Email" ...
<input name="PriceRequest[2].MobilePhone" ...

等。

票数 1
EN

Stack Overflow用户

发布于 2014-09-01 11:47:21

查看显示和编辑器模板。而不能创建一个名为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文件夹。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25604703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档