Asp.Net Mvc 2 Флажок всегда ложный в модели - PullRequest
5 голосов
/ 17 января 2012

У меня есть такой флажок:

<%= Html.CheckBoxFor(x => x.IsSendingQualitySurvey) %>/>

при установке флажка и отправке я получаю типичные 2 значения формы:

IsSendingQualitySurvey: true
IsSendingQualitySurvey: false

Это совершенно верно для способа, которым mvc modelbinder обрабатывает флажки.

Затем в действии контроллера:

[HttpPost]
public ActionResult Edit(Guid id, TicketEditViewModel ticketEditViewModel)

ticketEditViewModel.IsSendingQualitySurvey (обычный бул) всегда ложен.

У меня нет пользовательских папок с моделями, и это работает где-то еще. Как ни странно, довольно давно у меня была такая же проблема в другом представлении, где мне приходилось создавать ввод вручную, выглядит так:

<input type="checkbox" value="true" name="<%=Html.NameFor(x => x.IsRequestingVisit) %>" id="<%=Html.NameFor(x => x.IsRequestingVisit) %>" />

Это сработало, но когда я скопировал то же самое в другое представление, значение все равно всегда ложно.

Где добыча?

Спасибо.

Ответы [ 4 ]

1 голос
/ 17 января 2012

РЕДАКТИРОВАТЬ Неправильный конец флешки ... извините

Вы пытались извлечь необработанное значение из почтовых данных следующим образом:

В контроллере:

[HttpPost]
public ActionResult Edit(Guid id, TicketEditViewModel ticketEditViewModel,
                                            FormCollection fc) {

    if(fc["IsSendingQualitySurvey"].Contains("true")) {
        //Do something.
    }
}    

В представлении:

<%= Html.CheckBoxFor(model => model.IsSendingQualitySurvey) %>

Надеюсь, это поможет ..

1 голос
/ 17 января 2012

Модель переплета, вероятно, не подхватит переплет.Мой совет: измените ваше действие на:

 [HttpPost] 
 public ActionResult Edit(Guid id, TicketEditViewModel model)

Связыватель модели хочет найти свойства в запросе с префиксом, соответствующим имени вашего объекта.Поскольку на стороне клиента нет префикса именования, отсутствуют свойства с префиксом ticketEditViewModel.

В качестве альтернативы можно назвать переменную на странице:

 <% var ticketEditViewModel = Model; %>
 <%= Html.CheckBoxFor(model => ticketEditViewModel.IsSendingQualitySurvey) %>
0 голосов
/ 10 мая 2016

Я не уверен, будет ли это работать для вас, но на самом деле это решило ту же проблему для меня. Попробуйте добавить (не заменяя) скрытое поле для свойства той же модели, например:

@Html.HiddenFor(x => x.IsSendingQualitySurvey)
0 голосов
/ 10 апреля 2013

Для следующей модели:

открытый класс StartViewModel {

public string Id{ get; set; }

public string Name { get; set; }

public bool Accept { get; set; }

}

-> Accept = false.

Решение: сменить public bool Accept {get; задавать; } к общедоступной строке Accept {get; задавать; } * +1010 *

При отправке, если флажок установлен, значение «Принять» = «вкл». Вы можете удалить проверенное значение по пути.

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