Модель MVC ActionResult использует кэшированное представление - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть маршрут HttpGet с именем EmailOptions(), а маршрут HttpPost также называется EmailOptions(OptionsVm emailOptions). В этот момент они возвращают представление с тем же именем (EmailOptions.cshtml), которое имеет OptionsVm в качестве модели представления. OptionsVm содержит объект домена, который имеет несколько логических свойств, а также строку, используемую для отображения сообщения.

Как только я установил для некоторых из OptionsVm объекта домена bools значение true и post для EmailOptions(OptionsVm emailOptions), я установил в строку простое сообщение и сбросил объект домена в новый объект домена (поэтому все, что было установлено как истинное, должно вернуться к ложному).

То, что я ожидаю увидеть, - это та же страница, что и раньше, при этом флажок bool (флажки) не проверяется, единственное изменение - строка с сообщением, которое будет отображаться. Однако, хотя он устанавливает страницу с новым строковым значением, флажки bool сохраняют свое предыдущее проверенное состояние из before и. Я знаю, что это идет к правильному маршруту post (в конце концов, строка задается с новым значением), я просто не понимаю, почему модель домена, похоже, сохраняет свои прежние значения, особенно, как я явно задает модель домена для новой модели домена.

Кажется, мое мнение кешируется? Но это не имеет смысла .. У кого-нибудь есть идея, почему это происходит?

Код:

// controller 
public class AController : Controller 
{
    ...
    public ActionResult EmailOptions()
    {
        ...
        return View(
          new OptionsVm {
              DomainObj = new DomainObj()
          }
        )
    }

    [HttpPost]
    public ActionResult EmailOptions(OptionsVm vm)
    {
        ... // don't do anything with the actually passed in OptionsVm
        return View(
          new OptionsVm {
              DomainObj = new DomainObj(),
              StringContent = "some message"
          }
        )
    }
}


// viewmodel
public class OptionsVm
{
    public BooleanObjs DomainObj { get; set; }
    public string MessageSometimes { get; set; }
}

1 Ответ

0 голосов
/ 10 сентября 2018

Прежде всего, я не уверен, что вы можете вернуть представление с помощью действия POST.

Итак, я вижу 2 варианта:

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

ИЛИ

Возможно, вы могли бы использовать RedirectToAction ("имя", модель) в вашем пост-контроллере для перенаправления на GET-контроллер.

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