我有一个创建/更新 Irrf
View :
@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; }
}
我不知道如何将 IrrfList 属性绑定(bind)到 IrrfViewModel
中。
有什么建议吗?
最佳答案
您应该使用编辑器模板。
在 ~/Views/Home/
中创建一个名为 IrrfDTO.cshtml
的新 Razor View (假设您的 GET 操作方法在 HomeController
中。根据您的要求更改位置。
在这个新 View 中,有这段代码
@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
}
关于c# - 如何在 MVC 中绑定(bind)列表属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36651508/