2012-07-28 108 views
0

net mvc 3並試圖創建一個博客應用程序。我想有一個包含一個urlheader如URL:在asp.net中自定義urlheader博客

博客/詳細信息/第三後

但是,我得到一個URL是這樣的:

Blog/Details/3?urlHeader=Third-post 

我在做什麼錯誤?

我的博客控制器如下:

public ViewResult Details(int id, string urlHeader) 
{ 
    var blogs = blogrepository.GetBlog(id); 
    var recentblogs = blogrepository.FindRecentBlogs(5); 
    var archivelist = blogrepository.ArchiveList(); 
    BlogDetailsViewModels viewModel = new BlogDetailsViewModels { Blog = blogs, RecentBlogs = recentblogs, ArchiveList = archivelist }; 
    return View(viewModel); 
} 

和路徑方法如下:

routes.MapRoute(
     "BlogDetail", // Route name 
     "Blog/Details/{urlHeader}", // URL with parameters 
     new { controller = "Blog", action = "Details" }, // Parameter defaults 
     new { urlHeader = "" } // Parameter constraints 
    ); 

和鏈接如下:

@Html.ActionLink(Model.Title , "Details", "Blog", new { id = Model.BlogID, urlHeader = Model.UrlHeader }, null) 
+0

這裏有些不一致的東西。您在ActionLink中傳遞了一個'id'參數,但是您的路由定義中沒有{{id})佔位符(實際上存在 - 在我懷疑您保留的默認路由中,以及與此新路由衝突的路由) 。如果你期望'Blog/Details/Third-post'作爲url,給予'id = Model.BlogID'有什麼意義?你不想讓目標網址成爲「Blog/Details/3/Third-post」嗎? – 2012-07-28 09:31:23

+0

id是http post詳細博客控制器需要獲取正確的博客文章 – Tripping 2012-07-28 09:36:11

+0

好吧,然後修復你寫下你希望'Blog/Details/Third-post'爲url的問題。你想要'Blog/Details/3/Third-post'。 – 2012-07-28 09:36:37

回答

0

你可以有以下路線:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Blog", 
     "Blog/Details/{id}/{urlHeader}", 
     new { controller = "Blog", action = "Details", urlHeader = UrlParameter.Optional }, 
     new { id = @"\d+" } 
    ); 

    routes.MapRoute(
     "Default", 
     "{controller}/{action}/{id}", 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
}