Это - вероятно, снова вопрос о новичке.
Когда я создаю приложение ASP.NET MVC2, Контроллер Учетной записи с Действием, LogIn создается как это:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
FormsService.SignIn(model.UserName, model.RememberMe);
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
Теперь, я не хочу иметь страницу входа в систему, я хочу иметь управление входом в систему как часть большей страницы. Так, я изменил Login.aspx на Login.ascx, и я интегрирую его в своем основном представлении любой с HTML. RenderPartial или HTML. RenderAction.
Обе работы как очарование, если вход в систему успешен. Если это не,
return View(model)
уничтожает меня. То, что я хочу, должно вернуться к моей основной странице (назовите ее Домом/Индексом), но с информацией об ошибке частичного представления.
return RedirectToAction("Index", "Home")
Очевидно, не работает.
Подсказки?
Да redirecttoaction, но предоставьте сообщение об ошибке в tempdata, так что вы должны сделать что-то вроде этого
TempData["errorMsg"] = "incorrect values provided";
return RedirectToAction("Index", "Home")
Конечно, в основном индексе у вас должен быть div, который отображает сообщение
<%= html.Encode(TempData["errorMsg"]) %>
EDIT Я вижу, что вы хотите сохранить modelstate, что может быть проблемой, но что вы можете сделать, это передать modelstate в действии index или передать объект modelstate в tempdata. Затем вы можете проверить, есть ли ошибки modelstate в объекте, и если есть, проверить поле и добавить ошибку в нужное поле.
Вы можете явно указать возвращаемое представление:
return View("~/Views/Home/Index.aspx", model);
Таким образом, информация об ошибке будет сохранена и представление будет отображаться правильно.
Взгляните на практику № 13 в этом блоге . Этот метод хорошо подходит для передачи информации о состоянии модели при кодировании в стиле PRG (Post-Redirect-Get). Вам просто нужно создать пару фильтров действий и при необходимости применить их к действиям получения и публикации.