Как повторно использовать данные модели на пост обратно с MVC - PullRequest
1 голос
/ 19 января 2012

Я передаю структурированные данные на свою страницу MVC при начальной загрузке. После того, как пользователь отправит контактную форму, я хочу повторно использовать те же данные (я просто «оставляю» ту же страницу вверх), чтобы мне больше не приходилось обращаться к базе данных. Я объявил переменную global для контроллера для хранения данных модели, но в конце поста она равна нулю, так что, похоже, я не могу использовать ее там снова.

Похоже, это был бы типичный сценарий. Как мне с этим справиться?

Ответы [ 4 ]

4 голосов
/ 19 января 2012

Если вы хотите повторно использовать viewmodel или другие извлеченные данные, которые не будут частью обратной передачи, вы можете либо

a) Вывести их в скрытые поля, чтобы они были отправлены обратно в ваши действия(meh) или

b) Сохраните объект (ы) в сеансе, чтобы он был доступен для любых других контроллеров / действий в вашем приложении.Если вас беспокоит память, вы можете удалить эту переменную сеанса после ее повторного использования, если вам не понадобится использовать ее снова.

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

Да, и почему глобальные переменные не работают -> контроллер новый для каждого запроса (при условии использования фабрики контроллеров по умолчанию) и как таковойлюбые глобальные переменные в контроллере будут сбрасываться при каждом запросе.

4 голосов
/ 19 января 2012
public ActionResult Foo()
{
    var model = GetModelFromDB();
    Return View(model);
}

[HttpPost]
public ActionResult Foo(Entity model)
{
    Return View(model);
}

Asp.net-mvc имеет значение без состояния , поэтому каждый HTTP-запрос имеет свой контекст, и каждый раз, когда вы нажимаете контроллер, все данные сбрасываются в конструкторе, поэтому вы получаете null.

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

0 голосов
/ 20 января 2012

Если вы действительно не хотите покидать страницу, на которой находитесь, и не хотите публиковать все остальные данные, как рекомендует KMan, но все же хотите получить контактную информацию / данные пользователей, которые вы можете опубликовать в контакте. информация с использованием ajax.

0 голосов
/ 19 января 2012

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

public ActionResult TestAction(MyViewModelType testViewModel)
{
   //Do logic

    return View("view",testViewModel);

}

Обратите внимание, что данные должны быть внутри формы, которую вы отправляете.

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