我有一个创建/更新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 。
任何建议?
答案 0 :(得分:0)
您应该使用编辑模板。
在IrrfDTO.cshtml
内创建一个名为~/Views/Home/
的新剃须刀视图(假设您的GET操作方法位于HomeController
内。根据您的要求更改位置。
在这个新视图中,有这个代码
@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].FinalValue
,IrrfList[1].FinalValue
)
由于输入属性名称很好,Modelbinder将能够将发布的表单值映射到HttpPost操作中的IrrfViewModel
对象。
[HttpPost]
public ActionResult Update(IrrfViewModel model)
{
// check model.IrrfList property.
// to do : Return something
}