2012-07-28 50 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 } 
    ); 
}