@ Html.HiddenFor не передает значение в контроллер - PullRequest
0 голосов
/ 19 октября 2019

Мне известно, что есть похожие вопросы. Я прочитал почти все из них (если кто-то не может доказать обратное).

Я пишу приложение службы поддержки в качестве учебного проекта, чтобы улучшить свои навыки программирования.

У меня естьСоздайте действие, которое создает «Билет» как часть того, что я хочу установить для «Состояния» этого «Билета» на «Новый». Причина, по которой я хочу, чтобы он был отключен, заключается в том, что только пользователи с ролью администратора должны иметь возможность обновлять состояние (Inprogress, onhold, resolved, closed и т. Д.).

Вот что я пробовал до сих пор:

    <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 равен нулю.

Возможно, я упустил что-то простое, если кто-то может, пожалуйста, возьмитепосмотрите и укажите на это?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 21 октября 2019

Вам нужно изменить порядок элементов и поместить HiddenFor выше DropDownListFor.

Это связано с тем, что при отправке формы возвращается первый вход с идентификатором, совпадающим с моделью.

Также ничего не стоит, что отключенные входные данные не возвращается при публикации в контроллере. Поэтому я считаю, что происходит то, что ваш отключенный раскрывающийся список обнаруживается перед скрытым, и поэтому отправляет нулевое значение.

Я заметил, что вы пытались добавить другой идентификатор в DropDownListFor, однако я неубедитесь, как это работает с точки зрения правильного связывания модели.

Другой вариант - отображать метку вместо отключенного раскрывающегося списка.

0 голосов
/ 21 октября 2019

Попробуйте:

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

ps: есть ли значение в Model.States?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...