2010-06-02 104 views
3

由於某種原因,我的應用程序未正確路由到我的控制器方法。我有這樣的routelink在我的網頁 -自定義路由未找到控制器操作

<%= Html.RouteLink("View", "Blog", new { id=(item.BlogId), slug=(item.Slug) }) %> 

在的global.asax.cs我有以下途徑 -

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "MoreBlogs", 
     "Blog/Page/{page}", 
     new { controller = "Blog", action = "Index" } 
    ); 

    routes.MapRoute(
     "Blog", 
     "Blog/View/{id}/{slug}", 
     new { controller = "Blog", action = "View"} 
    ); 

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

然後我有了一個方法的類BlogController -

public ActionResult View(int id, string slug) 
    { 

     ... etc. 
    } 

我在View方法的第一行放置了一個斷點,但它根本沒有被擊中。我使用路由調試器檢查了localhost/Blog/View/1/test格式,並匹配了我的自定義路由。我得到的是一個404運行這個,我不知道爲什麼路線不會發布到我的控制器中的視圖方法 - 任何想法?

+0

你可以發佈調試器結果的屏幕截圖嗎? – 2010-06-02 19:29:00

+0

我剛剛意識到兩個答案都基於假設。請用更多信息更新問題。謝謝。 – Ahmad 2010-06-03 06:43:37

回答

0

(假設路線調試器是基於菲爾哈克的debugger後)

如果你得到一個404,這讓我覺得實際的視圖頁面本身不能被發現。

+0

是的。如果視圖本身沒有找到,我不應該在視圖方法中打斷點嗎? – mcfroob 2010-06-02 19:06:50

+0

我找到了解決方法。我用「slug」字段更新了我的數據庫表,並將它們再次帶入我的項目中(我正在使用Linq to SQL)。由於某些原因,當我嘗試使用item.Slug設置一個ActionLink時,鏈接將無法工作,但是如果我使用Title屬性,它可以正常工作。現在我已經將Slug移動到了一個部分類中的一個屬性中,它將我的Linq擴展爲SQL對象,並在getter中進行slu generation生成,並且事情工作正常。不知道這是一個錯誤還是什麼,我已經清理並重建了我的項目等。如果我手動鍵入它們,而不是從一個ActionLink鏈接工作。 – mcfroob 2010-06-03 17:26:39

0

假設您也在使用應用程序中的區域,並且RouteLink實際上是從區域內調用的,我認爲您可能需要在您的routeValues對象中指定area=""(您還需要指定控制器)。一般來說,我認爲在使用區域時,您需要添加area="..."部分以及所有Routelink調用。

這是我拿起有關RouteLink和Area的東西,但似乎找不到任何參考資料,詳述了這些限制。