簡體   English   中英

@Html.HiddenFor 沒有將值傳遞給 controller

[英]@Html.HiddenFor does not pass Value to controller

我知道有類似的問題。 我幾乎通讀了所有這些(除非有人可以證明相反)。

我正在編寫一個幫助台應用程序作為一個練習項目,以提高我的編程技能。

我有一個創建操作,它創建一個“票”作為我希望將該“票”的“狀態”設置為“新”的一部分。 我希望將其禁用的原因是只有具有管理員角色的用戶才能更新 state(進行中、暫停、已解決、已關閉等)。

這是我迄今為止嘗試過的:

    <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>

問題:該值無法到達 controller,最終 db 列是 null。

我可能忽略了一些簡單的事情,如果是這樣,有人可以看看並指出它嗎?

謝謝。

您需要重新排列元素的順序並將 HiddenFor 放在 DropDownListFor 上方。

這是因為提交表單時,會返回與 model 匹配的第一個輸入。

發布到 controller 時返回禁用的輸入也毫無價值。 所以我相信正在發生的事情是在隱藏之前找到了您的禁用下拉列表,因此正在提交 null 值。

我注意到您嘗試向 DropDownListFor 添加不同的 id,但是我不確定這在正確的 model 綁定方面是如何工作的。

另一種選擇是顯示 label 而不是禁用的下拉菜單。

嘗試這個:

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

ps:Model.States中是否有值?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM