我正在尝试创建一个单独的视图,允许用户使用索引视图模型查看当前列出的项目,然后还允许用户使用单独的创建视图模型创建新项目
所以我有两个viewModels -IndexFunkyThingsViewModel -CreateFunkyThingViewModel
本质上我有一个主要观点:
@model IndexFunkyThingsViewModel
@foreach (var item in Model.FunkyThings)
{
/*Indexy stuff*/
}
/*If create item*/
@if (Model.CreateFunkyThing)
{
@Html.Partial("_CreateFunkyThingPartial", new CreateFunkyThingViewModel());
}
然后在我的部分视图中我有
@model CreateFunkyThingViewModel
@using (Html.BeginForm(MVC.FunkyThings.CreateFunkyThing(Model)))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Create FunkyThing</legend>
@Html.EditorForModel();
<p>
<input type="submit" class="button green" value="CreateFunkyThing" />
</p>
</fieldset>
}
最后在控制器中我有:
[HttpPost]
public virtual ActionResult CreateFunkyThing(CreateFunkyThingViewModel createFunkyThingViewModel)
{
..
}
这一切似乎都很愉快地编译,当我进入视图时,它可以显示创建字段等。然而,当我按下提交按钮时,控制器不会收到任何数据。然而,在调试器中调用ActionResult时,createFunkyThingViewModel参数在由提交按钮调用时为null。
我做错了什么?
答案 0 :(得分:2)
发布到控制器时,您不会将模型发送给它。使用此:
@using (Html.BeginForm("CreateFunkyThing", "ControllerName", FormMethod.Post))
然后从按钮周围删除p标签,不要使用任何内容。
段落标签倾向于将按钮与表单分开,即使它们位于同一个外部容器中。