如何绑定MVC中的列表属性?

时间:2016-04-15 15:44:34

标签: c# asp.net-mvc

我有一个创建/更新Irrf视图:

 @using (Html.BeginForm("Update", "ParamsController", FormMethod.Post))
 {
        <div class="row">
            @Html.DropDownList("Year", Model.Years.Select(p => new SelectListItem { Value = p.ToString(), Text = p.ToString() }), new { @class = "form-control", name = "Ano", id = "AnosDropDown" })
            @Html.ValidationMessageFor(n => n.Years)
         </div>
         <hr/>

           <div id="irrContent">
                @Html.Partial("_Irrf", Model.List.ToList())
           </div>

          <button class="col-xs-12 btn btn-success" data-enviaform>Save</button>                   
    }

ParamsController

    public ActionResult Irrf(int? year)
    {
        if (!year.HasValue)
            year= DateTime.Now.Year;

        var model = new IrrfViewModel
        {
            IrrfList = _service.Get(year.Value),
            Years = _service.GetYears(),
            Year = year.Value
        };

        if(Request.IsAjaxRequest())
            return PartialView("_Irrf", model.IrrfList.ToList());

        return View(model);
    }

在_Irrf PartialView中:

@model  List<Application.IrrfDTO>

 @for (var i = 0; i < Model.Count(); i++)
 { 
     <div class="mb20 col-xs-12 col-sm-4">
        @Html.TextBoxFor(n => Model[i].FinalValue, new { @class = "form-contro" })
    </div>

 }

在邮政行动中:

 public ActionResult Update(IrrfViewModel model)
 {
     //Code

 }

IrrfViewModel

 public class IrrfViewModel
 {
    public IEnumerable<IrrfDTO> IrrfList { get; set; }
    public IEnumerable<int> Years { get; set; }
    public int Year { get; set; }
 }

我不知道如何绑定IrrfViewModel内的属性 IrrfList

任何建议?

1 个答案:

答案 0 :(得分:0)

您应该使用编辑模板

IrrfDTO.cshtml内创建一个名为~/Views/Home/的新剃须刀视图(假设您的GET操作方法位于HomeController内。根据您的要求更改位置。 enter image description here

在这个新视图中,有这个代码

@model ReplaceWithYourNameSpaceHere.IrrfDTO
<div>
    @Html.TextBoxFor(s=>s.FinalValue)
</div>

现在在主视图中,只需使用Html.EditorFor辅助方法。

@model IrrfViewModel
@using(Html.BeginForm())
{
 <!-- Your other form controls goes here -->
    <div id="irrContent">
         @Html.EditorFor(s => s.IrrfList)
    </div>
    <button class="col-xs-12 btn btn-success" data-enviaform>Save</button>
}

编辑器模板将为IrrfList属性中的每个项目输入正确的输入名称(例如:IrrfList[0].FinalValueIrrfList[1].FinalValue

由于输入属性名称很好,Modelbinder将能够将发布的表单值映射到HttpPost操作中的IrrfViewModel对象。

[HttpPost]
public ActionResult Update(IrrfViewModel model)
{
  // check model.IrrfList property.
  // to do : Return something
}