我有两个提交应该导致控制器中的不同操作,但它们没有传递任何值。当有一个提交时,一切正常。这是视图
<table class="table">
@for (var i = 0; i < Model.items.Count; i++)
{
<tr>
@Html.HiddenFor(x => x.items[i].Id)
<td>
@Html.HiddenFor(x => x.items[i].name)
@Html.DisplayFor(x => x.items[i].name)
</td>
<td>
@Html.HiddenFor(x => x.items[i].surname)
@Html.DisplayFor(x => x.items[i].surname)
</td>
<td>
@Html.CheckBoxFor(x => x.items[i].Selected)
</td>
</tr>
}
</table>
@using (Html.BeginForm("DeleteItems", "package", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="form-group">
<input type="submit" value="Usuń" class="btn btn-default" />
</div>
}
@using (Html.BeginForm("TransferItems", "package", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="form-group">
<input type="submit" value="Przenieś" class="btn btn-default" />
</div>
}
和控制器中的操作
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult TransferDevices(PackageItemsViewModel viewModel)
{
...
提交后,viewmodel值为null
答案 0 :(得分:3)
提交HTML表单时,仅发送该表单标记内的字段(除非该字段具有引用单个表单的form
属性)。由于您的表单中没有任何字段,因此不会随提交一起发送任何字段。
我建议将所有内容放在一个表单中,然后使用javascript将action属性更改为一个值,具体取决于按下的按钮。
答案 1 :(得分:1)
在Razor语法中,您指向名为“TransferItems”的操作。在您的控制器中,您的操作名为“TransferDevices”。也许这只是一个简单的拼写错误?
答案 2 :(得分:1)
有两个更好的选择:
1)您可以将提交更改为按钮,并使用javascript对您的操作(TransferDevices)进行ajax调用,而不是此。
2)您可以使用Ajax.ActionLink:
@Ajax.ActionLink("TransferItems",
"package",
new AjaxOptions{
enctype = "multipart/form-data",
anotherParameter=Model.anotherParameter,
HttpMethod="POST"
})
答案 3 :(得分:1)
我遇到了同样的问题,问题是我在表单上将字段标记为disabled
。我删除了disabled
属性,它起作用了。