2013-05-17 3 views
2

У меня есть вид в MVC, называемый Action, который принимает и ID в качестве параметра. У меня также есть другое представление под названием Action, но оно отмечено как HTTPPOST.Возвращение представления GET после просмотра POST Сбой ASP.NET MVC

Возможна сбой программной версии POST. Когда он терпит неудачу, я хочу добавить ModelError, а затем перенаправить на версию GET Action, пока я предоставляю идентификатор.

Короче => Я хочу перейти к представлению GET из представления POST и передать параметры. Что-то вдоль линий

ModelState.AddModelError("", "Could not verify token"); 
return RedirectToAction("Action", "ExpiredAccounts" new { aid = myId }); 

Где Действие является мнением, ExpiredAccounts является контроллером и AID является идентификатором аккаунта. Это, конечно, не работает, так как вы можете добавить ошибку модели на вид, а не перенаправлять

Благодарности

+0

Зачем вам это нужно? Почему бы просто не вернуть ошибки модели на POST, если она не удалась? – Matt

ответ

7

Вы бы лучше вернуть ту же точку зрения в этом случае вместо того, чтобы перенаправлять:

ModelState.AddModelError("", "Could not verify token"); 
var model = repository.Get(myId); 
return View(model); 

правильный поток Redirect-After-Post шаблон следуя:

  1. запрос GET -> отображается некоторая форма
  2. Запрос POST -> форма отправляется на сервер. Возможны два возможных случая:
    • Проверка успешно => Перенаправление.
    • проверка терпит неудачу => Повторное отображение той же точки зрения, так что пользователь может исправить ошибки

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

return RedirectToAction(
    "Action", 
    "ExpiredAccounts" 
    new { aid = myId, error = "Could not verify token" } 
); 

, а затем в сторону мишени действия проверить, был ли поставляться этот параметр и добавьте ошибку в ModelState:

public ActionResult Action(int myId, string error) 
{ 
    if (!string.IsNullOrEmpty(error)) 
    { 
     ModelState.AddModelError("", error); 
    } 
    ... 
} 
+0

Все в порядке - я делал что-то по линии Дарина Димитрова. Проблема заключалась в том, что у меня было довольно много кода в запросе GET. Поэтому я поместил запрос Get в частный метод, и я вызываю его из метода GET и когда POST не работает. –

Смежные вопросы