在控制器中提交时,ViewModel值为空

时间:2016-11-07 20:21:03

标签: c# asp.net-mvc asp.net-mvc-4

我有两个提交应该导致控制器中的不同操作,但它们没有传递任何值。当有一个提交时,一切正常。这是视图

@ ViewBag.Title

<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

4 个答案:

答案 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属性,它起作用了。