1
我只是試圖將ModelState從一個動作傳遞給另一個控制器,以進行驗證。但是,模型狀態不會更新。我發現TempData [「____ MvcContrib_ValidationFailures____」]包含來自轉發Action的ModelStateDictionary,但我認爲這應該自動轉移到我當前的ModelState中?我哪裏錯了?爲什麼MVCContrib的ModelStateToTempData屬性不起作用?
我正在使用ASP.NET MVC2和MVCContrib 2.0.36.0。我也嘗試用這個屬性裝飾控制器,但結果是一樣的。
代碼:
[HttpGet]
[ModelStateToTempData]
public ActionResult NewsEventsSignup()
{
var newsEventsSignupDetails = this.TempData.GetItem<NewsEventsSignupDetails>();
var viewModel = _newsEventsSignupPageViewModelMapper.MapFrom(newsEventsSignupDetails);
return this.View(viewModel);
}
[HttpPost]
[ModelStateToTempData]
[ValidateAntiForgeryToken]
public ActionResult NewsEventsSignup(NewsEventsSignupFormViewModel newsEventsSignup)
{
ActionResult resultToReturn;
var newsEventsSignupDetails = _newsEventsSignupDetailsMapper.MapFrom(newsEventsSignup);
try
{
_newsEventsSignupTasks.SignupForNewsAndEvents(newsEventsSignupDetails);
resultToReturn = this.RedirectToAction(x => x.Index());
}
catch (RulesException e)
{
e.AddModelStateErrors(this.ModelState); // from xVal
this.TempData.AddItem(newsEventsSignupDetails); // for showing invalid input
resultToReturn = this.RedirectToAction(x => x.NewsEventsSignup());
}
return resultToReturn;
}
我不知道這是一個OnActionExecuted過濾器。驗證總結揭示了真相。我沒有得到輸入或字段驗證錯誤類設置,因爲我的錯誤是在「.Name」和「.Email」而不是「名稱」和「電子郵件」這是什麼輸入字段的名稱/ ids。奇怪。不知道爲什麼。正在插入。否則,事情似乎正在起作用。 – 2010-06-21 22:33:18
剛剛碰到這個問題我自己,謝謝馬爾科姆和克里斯F張貼的問題! – JoseMarmolejos 2010-10-20 19:33:50