@ Html.HiddenFor不会将Value传递给控制器

时间:2019-10-19 19:44:25

标签: c# asp.net-mvc

我知道也有类似的问题。我已经阅读了几乎所有内容(除非有人可以证明否则)。

我正在编写一个帮助台应用程序作为练习项目,以提高我的编程技能。

我有一个Create动作,它创建了一个“ Ticket”,我希望将该“ Ticket”的“ State”设置为“ New”。我希望将其禁用的原因是,只有具有管理员角色的用户才能更新状态(进行中,保留,已解决,已关闭等)。

这是我到目前为止尝试过的:

    <div class="form-group">
    @Html.LabelFor(model => model.State, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @if (User.IsInRole("Admin"))
        {
            @Html.DropDownListFor(m => m.State, Model.States, htmlAttributes: new { @class = "form-control" })
        }
        else
        {

            @Html.DropDownListFor(m => m.State, Model.States, new { @class = "form-control", @disabled = "disabled", @id = "FakeStates" })
            @Html.HiddenFor(m => m.State, Model.States)
        }
        @Html.ValidationMessageFor(model => model.State, "", new { @class = "text-danger" })
    </div>
    </div>

问题: 该值不会传递给控制器​​,并且最终db列为null。

我可能忽略了一些简单的事情,如果可以的话,请看一看并指出吗?

谢谢。

2 个答案:

答案 0 :(得分:3)

您需要重新排列元素的顺序,并将HiddenFor放在DropDownListFor上方。

这是因为提交表单时,将返回与模型匹配的ID的第一个输入。

发布到控制器时,返回禁用的输入也没有任何意义。因此,我认为这是在隐藏之前找到了您已禁用的下拉菜单,因此正在提交空值。

我注意到您已尝试向DropDownListFor添加其他ID,但是我不确定在正确的模型绑定方面这是如何工作的。

另一种选择是显示标签,而不是禁用的下拉菜单。

答案 1 :(得分:0)

尝试一下:

@Html.HiddenFor(m => m.State, new { Value = Model.States })

ps:Model.States中有值吗?

相关问题