這可能又是一個新手問題。ASP.Net MVC部分視圖保持其模型狀態?
當我創建一個ASP.NET MVC2應用程序,有動作登錄的賬號控制器創建這樣的:
[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)
正在殺死我。 我想要的是返回到我的主頁(稱爲Home/Index),但帶有局部視圖的錯誤信息。
return RedirectToAction("Index", "Home")
顯然不起作用。
提示?
嗯,可能我可以把整個LogOnModel放在TempData中。但對我來說,這似乎是一個黑客。這裏乾淨的解決方案是什麼? – Sparhawk 2010-06-21 06:08:21
是的,這是一個乾淨的解決方案是爲它寫一個過濾器。看看這個問題和我的答案舉例 http://stackoverflow.com/questions/2503032/where-to-use-controller-httpcontext/2503085#2503085 在過濾器中,您檢查模型狀態是否有效,如果不是添加值當然最好把它放在一個自定義屬性中,因爲我不認爲你需要在控制器的所有操作中使用這個值。然後,您可以在要維護模型狀態的操作上使用該屬性。 – Chino 2010-06-24 22:57:47
呃。這是TempData的用途。我的猜測是你不喜歡魔法字符串和缺乏強類型的數據。這很公平,但它是一種風格選擇,而不是黑客。 – a7drew 2010-06-29 23:05:03