MVC表单无法发布对象列表所以我有一个MVC ASP.NET应用程序有问题。本质上,我有一个视图,它包含一个表单,它的内容被绑定到一个对象列表中。在这个循环中,它加载PartialView中正在循环的项。现在一切都在运转,直到形体被提交。当提交时,控制器将被发送一个空对象列表。下面的代码证明了这些问题。家长意见:@model IEnumerable<PlanCompareViewModel>@using (Html.BeginForm("ComparePlans", "Plans", FormMethod.Post, new { id = "compareForm" })){<div>
@foreach (var planVM in Model)
{
@Html.Partial("_partialView", planVM)
}</div>}_ParalView:@model PlanCompareViewModel<div>
@Html.HiddenFor(p => p.PlanID)
@Html.HiddenFor(p => p.CurrentPlan)
@Html.CheckBoxFor(p => p.ShouldCompare)
<input type="submit" value="Compare"/></div>以下是上述代码的类:PlanViewModel:public class PlansCompareViewModel{
public int PlanID { get; set; }
public Plan CurrentPlan { get; set; }
public bool ShouldCompare { get; set; }
public PlansCompareViewModel(Plan plan)
{
ShouldCompare = false;
PlanID = plan.PlanId;
CurrentPlan = plan;
}
public PlansCompareViewModel()
{
// TODO: Complete member initialization
}
public static IEnumerable<PlansCompareViewModel> CreatePlansVM(IEnumerable<Plan> plans)
{
return plans.Select(p => new PlansCompareViewModel(p)).AsEnumerable();
}}主计长:public class PlansController : MyBaseController{
[HttpPost]
public ActionResult ComparePlans(IEnumerable<PlanCompareViewModel> model)
{
//the model passed into here is NULL
}}问题在于控制器的作用。据我所知,它应该发布一个PlanCompareViewModel的可枚举列表,但它是空的。在检查发送的POST数据时,它发送的是正确的Params。如果我要将‘IEnDigable’改为‘FormCollection’,它包含正确的值。有人知道为什么绑定器没有创建正确的对象吗?我可以使用javascript绕过这个问题,但这违背了目的!任何帮助都将不胜感激!
2 回答
largeQ
TA贡献2039条经验 获得超7个赞
null
@foreach (var planVM in Model){ @Html.Partial("_partialView", planVM)}
<input type="hidden" name="yourmodelprefix.PlanID" /><input type="hidden" name="yourmodelprefix.CurrentPlan" /><input type="checkbox" name="yourmodelprefix.ShouldCompare" />
<input type="hidden" name="yourmodelprefix[0].PlanID" /><input type="hidden" name="yourmodelprefix[0].CurrentPlan" /><input type="checkbox" name="yourmodelprefix[0].ShouldCompare" /><input type="hidden" name="yourmodelprefix[1].PlanID" /><input type="hidden" name="yourmodelprefix[1].CurrentPlan" /><input type="checkbox" name="yourmodelprefix[1].ShouldCompare" />
创建一个 EditorTemplates
视图当前文件夹中的文件夹(例如,如果您的视图是 Home\Index.cshtml
,创建文件夹 Home\EditorTemplates
).在该目录中创建一个强类型视图,其名称与您的模型相匹配。在你的情况下 PlanCompareViewModel.cshtml
.
@model PlanCompareViewModel<div> @Html.HiddenFor(p => p.PlanID) @Html.HiddenFor(p => p.CurrentPlan) @Html.CheckBoxFor(p => p.ShouldCompare) <input type="submit" value="Compare"/></div>
@model IEnumerable<PlanCompareViewModel>@using (Html.BeginForm("ComparePlans", "Plans", FormMethod.Post, new { id = "compareForm" })){<div> @Html.EditorForModel()</div>}
DisplayTemplates
EditorTemplates
- 2 回答
- 0 关注
- 445 浏览
添加回答
举报
0/150
提交
取消