【发布时间】:2011-09-02 12:47:25
【问题描述】:
我有控制器 BlogController 有几个动作:
1)Index(string id) - show all posts/show single post if parameter id specified
2)New() - add new post
3)Delete() - delete post
4)And some more another actions
所以如果我在浏览器中输入 mysite/blog 我可以看到所有帖子如果我输入 mysite/blog/postnameid 我想看到单个帖子。
问题是当我输入mysite/blog/postnameid 时它不工作 (The resource cannot be found.),但如果我输入mysite/blog/index/postnameid 以这种方式工作。我怎样才能让mysite/blog/postnameid也能正常工作。
这是我在global.ascx的博客路线
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRouteLowercase(
"Blog", // Route name
"Blog/{action}/{id}", // URL with parameters
new { controller = "Blog", action = "Index" } // Parameter defaults
);
routes.MapRouteLowercase(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
如果我这样改变它
routes.MapRouteLowercase(
"Blog", // Route name
"Blog/{id}", // URL with parameters
new { controller = "Blog", action = "Index" } // Parameter defaults
);
mysite/blog/postnameid 工作,但所有其他操作,如 New()、Delete() 之后停止工作 (The resource cannot be found.)
更新:
我忘了提到 id 是 sting,而不是 int。所以从@Darin 回答我将new { id = @"\w+" } 更改为new { id = @"\d+" } 并且所有接缝都可以工作,但是现在当我输入blog/new 时,它正在路由到show/new insteard blog/new
【问题讨论】:
标签: asp.net-mvc-3 routing asp.net-mvc-routing