2010-06-21 46 views
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; 
} 

回答

1

你如何檢查ModelState中未填充?這是一個OnActionExecuted過濾器,因此只有在Action完成時纔會被填充。您無法檢查操作中的值。

驗證ModelState真的有錯誤的最簡單方法是在視圖上添加驗證摘要。

要查看你的錯誤是不是XVAL與我會嘗試

ModelState.AddModelError("TestError", "This is an errortest"); 

在NewsEventsSignup重定向之前。

也不要嘗試在調試器或某些調試代碼中訪問TempData。第一次訪問它時會被刪除。

+0

我不知道這是一個OnActionExecuted過濾器。驗證總結揭示了真相。我沒有得到輸入或字段驗證錯誤類設置,因爲我的錯誤是在「.Name」和「.Email」而不是「名稱」和「電子郵件」這是什麼輸入字段的名稱/ ids。奇怪。不知道爲什麼。正在插入。否則,事情似乎正在起作用。 – 2010-06-21 22:33:18

+0

剛剛碰到這個問題我自己,謝謝馬爾科姆和克里斯F張貼的問題! – JoseMarmolejos 2010-10-20 19:33:50

相關問題