2011-05-31 158 views
2

我對MVC非常陌生,並且正在嘗試向已經開發的應用程序添加更多功能。MVC返回視圖()問題

我無法在驗證呈現模型無效後返回帶有發佈結果的視圖。

我的控制器具有值得注意的三個動作:由於此前的規定的

public ActionResult Create(int workID) 

[HttpParamAction] 
[HttpPost] 
public ActionResult SaveNormal(WorkViewModel workView) 

[HttpParamAction] 
[HttpPost] 
public ActionResult SaveAddAnother(WorkViewModel workView) 

,我不得不改變提交行動,使上述兩個中的一個被稱爲與公佈結果。一切工作正常,除了是我想要回後由於模型狀態無效的,這我試圖用以下幾點:

if (!ModelState.IsValid) 
    return View("Create", workView); 

它不帶我去創建(Create.aspx)查看,但URL是Work/Action,而不是Work/Create,這意味着當我重新保存時,找不到Work/Action。

我不知道這是否是一個路由的問題,但都低於供給路線(這基本上是默認的,我認爲...):

public static void RegisterRoutes(RouteCollection routes) 
{ 

    // This is the original 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { 
      controller = "Home", 
      action = "Index", 
      id = UrlParameter.Optional 
     } // Parameter defaults 
    ); 
} 

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    RegisterRoutes(RouteTable.Routes); 
} 

任何幫助將非常感激!

回答

1

該URL基於操作名稱;不在視圖名稱上。您可能需要RedirectToAction("Create"...)並從那裏發出查看()

+0

謝謝 - 我已經使用TempData重定向來存儲模型,雖然我失去了驗證消息。我需要在TempData中傳遞ModelState嗎? – user676767 2011-05-31 21:46:43

+0

簡短的回答是**是**。更長的回答是,您可能想重新考慮以下決定:*由於之前的要求,我必須更改提交操作,以便上述兩個中的一個與發佈結果一起調用* 嘗試進行一個提交操作「創建」並在那裏檢查模型狀態的邏輯,適當時保存,創建新的(這只是簡單地返回創建一個新的空視圖),等等。看起來更清潔和更簡單。 – Felix 2011-05-31 21:53:33

+0

好吧,我也在TempData中傳遞了ViewData(它包含invlaid modelstate)。 在迴應重新思考時,控制器就是這樣設置的,因爲我們希望在頁面上有兩個按鈕,允許兩個按鈕提供不同的操作,保存(插入和重定向到其他頁面)和SaveAndAddOther(插入並用新模型重新加載)。我當時似乎記得,這是實現這一目標的唯一方法,但是我可能會錯過另一個解決方案。 – user676767 2011-05-31 22:28:17