Asp.net mvc 4 ASP.NET MVC编辑器模板包含提交表单,到达控制器时值为空
我有一个父母捐赠基金,在一个叫做Criteria的集合中有很多标准。我正在构建一个编辑表单,希望在其中编辑父属性以及添加/删除标准 Endowment.cs、Criteria.cs和EndowmentEditViewModel.csAsp.net mvc 4 ASP.NET MVC编辑器模板包含提交表单,到达控制器时值为空,asp.net-mvc-4,Asp.net Mvc 4,我有一个父母捐赠基金,在一个叫做Criteria的集合中有很多标准。我正在构建一个编辑表单,希望在其中编辑父属性以及添加/删除标准 Endowment.cs、Criteria.cs和EndowmentEditViewModel.cs public class Endowmment { public int ID {get; set;} public string Description {get; set;} ... public virtual ICollect
public class Endowmment {
public int ID {get; set;}
public string Description {get; set;}
...
public virtual ICollection<Criterion> Criteria {get; set;}
}
public class Criterion {
public int ID {get; set;}
public int EndowmentID {get; set;}
public string Description {get; set;}
public string SortOrder {get; set;}
}
public class EndowmentEditViewModel {
public Endowment Endowment {get; set;}
...
}
这就是我为了让它工作所做的: 在我看来,Views/Endowment/Edit.cshtml
@model EndowmentEditViewModel
@using (Html.BeginForm("Edit", "Endowment")
{
@Html.HiddenFor(m => m.Endowment.ID)
@Html.TextBoxFor(m => m.Endowment.Description)
<input type="submit" value="Save endowment" />
}
@Html.EditorFor(m => m.Endowment.Criteria)
@*@Html.EditorFor(m => m.Endowment.Criteria)*@
@foreach (var criterion in Model.Endowment.Criteria)
{
@Html.EditorFor(m => criterion)
}
....
在controller/Controllers/CriterionController.cs中
[HttpPost]
public ActionResult Edit(Criterion model)
{
if (ModelState.IsValid)
{
repository.SaveCriterion(model);
// insert happy message
TempData["message"] = string.Format("Criterion {0} was saved", model.Description);
}
else
{
// there is something wrong with the data values
// inesrt fail message
}
return RedirectToAction("Edit", "Endowment", new { id = model.EndowmentID });
}
[HttpPost]
public ActionResult Edit([Bind(Prefix = "criterion")] Criterion model)
{
...
编辑器模板中没有更改
奇怪。我原以为foreach在某种意义上是愚蠢的,但它是为了这个特殊的目的而工作的。好吧,我想任何父母/孩子在同一个观点也是愚蠢的,但这对我来说是有效的。如果有更好的方法,我很想知道。有一个稍微好一点的方法。MVC将为您枚举模型对象,并为列表中的每个项目显示一次编辑器模板。例如,这:
@Html.EditorFor(m => criterion) //Assumes criterion is is a list or collection
做与此相同的事情:
@foreach (var criterion in Model.Endowment.Criteria)
{
@Html.EditorFor(m => criterion)
}
@foreach (var criterion in Model.Endowment.Criteria)
{
@Html.EditorFor(m => criterion)
}