ASP MVC 3 скрытое поле обратной связи - PullRequest
0 голосов
/ 24 ноября 2011

У меня есть приложение ASP MVC 3,

В моей модели у меня есть свойство IsGoodMode bool.

и используя это свойство как <%: Html.HiddenFor(m => m.IsGoodMode)%> в моем представлении

Когда я открываю страницу в первый раз, мой IsGoodMode содержит значение false. Я меняю значение IsGoodMode с false на true в JavaScript. Я нажимаю кнопку подтверждения, и контроллер получает модель с IsGoodMode, содержащим истинное значение.

в контроллере я меняю IsGoodMode на false;

Но на странице просмотра IsGoodMode все еще имеет истинное значение.

        [HttpPost]
        public ActionResult Index(SettingsModel model)
        {                                
            model.IsGoodMode = false;
            return View(model);
        }

Почему это происходит? Как связать MVC3 свойства после поста назад?

Спасибо

Ответы [ 2 ]

2 голосов
/ 24 ноября 2011

Статья MSDN о ModelState является краткой, если не сказать больше, но за это отвечает ModelState.

После обработки @ Html.BeginForm () элементы управления заполняются значениями из ModelState текущей модели, если это применимо.

Вы можете переопределить это поведение, вызвав ModelState.Clear () в вашем методе действия.

1 голос
/ 24 ноября 2011

Я пытался повторить то же поведение в моем местном. Я чувствую, что с помощью вспомогательного метода Html.HiddenFor () происходит нечто сумасшедшее. Я получил функционал, используя несколько разные подходы.

Подход: 1

  • Замените Html.HiddenFor () обычным скрытым элементом ввода html. Я использовал следующую разметку, и она работала:

    <input type="hidden" value="<%= Model.IsActive %>" />
    

Подход: 2

  • Используется альтернативный синтаксис для Html.HiddenFor (). Дано ниже:
      <%= Html.HiddenFor(x => Model.IsActive) %>

Вы можете попробовать любой из двух подходов, и я думаю, это должно работать и для вас.

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