2015-01-09 89 views
0

所以我有這樣的自定義路線:MVC自定義路由HttpPost失敗

routes.MapRoute(_ 
      "Article", _ 
      "Article/{id}", _ 
      New With {.controller = "Article", .action = "Index", .id = UrlParameter.Optional} _ 
     ) 

我的控制器:

Function Index(Optional ByVal Id As String = "") As ActionResult 

      If Id <> "" Then 
       //do something 
       Return View("ArticleDetail", model) 
      Else 
       Return View() 
      End If 
     End Function 

<HttpPost()> 
     Function Comment(ByVal model As ArticleModel) As ActionResult 
      If ModelState.IsValid Then 
       //do something 
      End If 

      Return View("ArticleDetail", model) 
     End Function 

筆者認爲:

Using Html.BeginForm("Comment", "Article", FormMethod.Post) 

的問題是,它贏得不要讓我打電話給「評論」方法,而是調用「評論」的「索引」方法作爲「ID」,因爲我的RouteConfig設置。我如何實現這一目標?

對不起,英語不好,任何幫助將不勝感激。

更新: 我嘗試添加像「Dakshal Raijada」另一條路線建議

routes.MapRoute(_ 
      "ArticleComment", _ 
      "Article/Comment", _ 
      New With {.controller = "Article", .action = "Comment"} _ 
     ) 

它的工作原理,但由於某些原因,這導致其控制器之前打電話給我的模型構造導致空模型。任何想法?

+0

調試路由問題是非常困難的。嘗試將@ haacked的[route debugger](https://www.nuget.org/packages/routedebugger/)添加到您的項目中以隔離問題。 –

回答

0

看你的路由你總是調用Index方法不管什麼

嘗試使用這樣的:

routes.MapRoute(_ 
    "Article", _ 
    "Article/{id}", _ 
    New With {.controller = "Article", .action = "Comment", .id = UrlParameter.Optional} _ 
) 

評論是行動,而不是編號。

希望可以幫到

+0

感謝您的快速響應。由於我希望我的用戶只輸入site.com/Article/{article-name}而不是site.com/Article/Index/{article-name},因此我不想要{action}。 – warheat1990

+0

抱歉,我的壞,但評論是很好,有site.com/Article/Comment/{article-name}? –

+0

再次請您閱讀我編輯的問題。 該評論應該重定向到另一個視圖(aka Detail),所以用戶甚至不會在他們的瀏覽器URL中看到「評論」。 – warheat1990