ASP.NET MVC частичные представления, сохраняющие их образцовое состояние?

Это - вероятно, снова вопрос о новичке.

Когда я создаю приложение 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")

Очевидно, не работает.

Подсказки?

9
задан Ikke 20 June 2010 в 10:23
поделиться

3 ответа

Да redirecttoaction, но предоставьте сообщение об ошибке в tempdata, так что вы должны сделать что-то вроде этого

TempData["errorMsg"] = "incorrect values provided";
return RedirectToAction("Index", "Home")

Конечно, в основном индексе у вас должен быть div, который отображает сообщение

<%= html.Encode(TempData["errorMsg"]) %>

EDIT Я вижу, что вы хотите сохранить modelstate, что может быть проблемой, но что вы можете сделать, это передать modelstate в действии index или передать объект modelstate в tempdata. Затем вы можете проверить, есть ли ошибки modelstate в объекте, и если есть, проверить поле и добавить ошибку в нужное поле.

1
ответ дан 3 November 2019 в 07:46
поделиться

Вы можете явно указать возвращаемое представление:

return View("~/Views/Home/Index.aspx", model);

Таким образом, информация об ошибке будет сохранена и представление будет отображаться правильно.

0
ответ дан 3 November 2019 в 07:46
поделиться

Взгляните на практику № 13 в этом блоге . Этот метод хорошо подходит для передачи информации о состоянии модели при кодировании в стиле PRG (Post-Redirect-Get). Вам просто нужно создать пару фильтров действий и при необходимости применить их к действиям получения и публикации.

0
ответ дан 3 November 2019 в 07:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: