ASP.NET: как сделать флажок всегда снятым даже после отправки

Только начал изучать, как разрабатывать приложение ASP.NET, я озадачен тем, как сделать флажок всегда снятым, даже после отправки формы, когда пользователь ставит флажок. Флажок предназначен для подтверждения того, что пользователь согласен с условиями... и когда отправка формы возвращает некоторые ошибки, я хочу отобразить сообщение об ошибке на экране и оставить флажок снятым, независимо от того, был ли он отмечен или нет.

На мой взгляд имею следующее:

<%: Html.CheckBoxFor(m => m.UserAgreement) %>

И я пробовал в своем контроллере следующее, и ни один из них не работает:

ViewData["UserAgreement"] = false;

return View(new MyModel { UserAgreement = false});

Кто-нибудь может помочь в том, как достичь того, что мне нужно? Спасибо.


person user152235    schedule 03.12.2010    source источник


Ответы (4)


Меня это тоже давно беспокоило, даже явное задание значений в моей модели на false на самом деле не решило эту проблему. Я обнаружил, что он также проверял значение в коллекции ModelState.

Это, вероятно, не самое чистое решение, но в конечном итоге это сработало для меня:

private ActionResult DisplayView(string viewName, MyModelClass model)
{
    model.AgreeTerms = false;
    ModelState.Remove("AgreeTerms");

    return View(viewName, model);
}
person Bryce Simonds    schedule 30.10.2012

Флажок ASP.NET MVC не сохраняет свое состояние, если вы специально не сообщите ему об этом.

Код, который вы разместили выше, указывает, что «UserAgreement» должен быть проверен (значение TRUE) при возврате представления, а не то, что его следует снять.

Если вы специально не установите значение UserAgreement в «true» перед возвратом представления пользователю, флажок будет снят. Точно так же, если ваше действие получает модель со свойством UserAgreement, для которого задано значение «true», и вы не установили для него значение «false» перед возвратом в представление, флажок останется установленным.

person Nathan Taylor    schedule 03.12.2010
comment
Привет, Натан, извините, я сделал ошибку в своем посте, который я исправил. Я хотел присвоить false как значение. И у меня все еще есть флажок, если я проверил его перед отправкой. Все, что я делаю с флажком, сохраняется после отправки. Это не то, что я хочу ... Я хотел бы, чтобы флажок всегда был снят, независимо от того, был ли он установлен или снят перед отправкой. - person user152235; 03.12.2010

Ваше значение сохраняется в свойстве ModelState. Для сброса значения после поста. Вы должны очистить значение в свойстве ModelState

person Kyle    schedule 03.12.2010
comment
Привет, Кайл, и как мне это сделать? Я думал, моя последняя строка кода сделала это? - person user152235; 03.12.2010

Попробуйте ModelState.Remove("UserAgreement"); перед возвратом представления.

person Joe Adkins    schedule 10.01.2012