0
在下面的代碼片段中,您會用什麼來代替TempData以實現相同的預期結果 - 在無效的ModelState情況下重定向並傳遞登錄錯誤?如何在不使用TempData的情況下實現相同的結果
public ActionResult Welcome(string returnUrl, int accountTypeId = 0)
{
//this is logic from the original login page. not sure if this would ever occur. we may be able to remove this.
if (string.IsNullOrEmpty(returnUrl) == false && returnUrl.Contains("?route="))
{
var split = returnUrl.Split(new[] {"?route="}, StringSplitOptions.None);
var route = Server.UrlDecode(split[1]);
returnUrl = split[0] + "#" + route;
}
object model;
if (TempData.TryGetValue("LogOnModel", out model) == false)
{
model = new LogOnModel
{
ReturnUrl = returnUrl,
AccountTypeId = accountTypeId
};
}
object errors;
if (TempData.TryGetValue("Errors", out errors))
{
ModelState.Merge(errors as ModelStateDictionary);
}
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Welcome(LogOnModel model)
{
Func<ActionResult> invalid =() =>
{
TempData.Add("Errors", ModelState);
TempData.Add("LogOnModel", model);
return RedirectToAction("Welcome");
};
if (ModelState.IsValid == false)
{
return invalid();
}
正如目前的情況是,如果用戶點擊後退按鈕和嘗試登錄在第二時間代碼創建一個錯誤。錯誤消息「具有相同密鑰的項目已被輸入」我試圖避免此錯誤。我嘗試在TempData的地方使用ViewData,但是在有人輸入錯誤密碼的情況下,這打破了我的登錄錯誤消息。我是MVC的新手,所以我正在尋求其他人的意見。