public class chanpinController : Controller { public ActionResult jiancai(string id, SearchModel search) { ProductModel model = new ProductModel(); return View(model); } }
http://localhost:4254/chanpin/jiancai/ 访问会找不到这个Action
但只要jiancai/随便加个字符就能访问了,这是什么原因造成的呢?
找到问题了,原来我生成静态页的时候在根目录下生成了一个chanping的文件夹。
你没提供参数呗,随便加个字符就是给id这个参数传值了,所以能访问到。
但前几天我的这个备份,http://localhost:4254/chanpin/jiancai/能正常访问的,我就是不知道这几天改了什么变成这样!
@wuanju . com: 楼下的说了,看看路由配置是否正确
因为你的路由配置(看global.asax)里,这个action是必须要带参数id的,如果你不带id,那么MVC框架会认为这个action不匹配你的请求,因此就找不到对应的action了。把id改成可选参数就好了,大概是这样:
routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults );
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Index", action = "Index", id = UrlParameter.Optional } // Parameter defaults , new[] { "KingCMS.Controllers" } ); }
这是我的路由也应该是没有问题的。
@wuanju . com: 你的最后一个参数 new[] { "KingCMS.Controllers" } 给这个路由加了限制,你删掉试试,如果删掉就好了,说明是这个contraints参数写的不对。
@水牛刀刀: 试了,删除掉也没有用,以前我就这么加可以用的,前几天的备份代码是正常的,就是这几天改了些代码就成这样。
@wuanju . com: 查看一下改了哪些地方的代码,重点看路由部分和参数默认值部分
@wuanju . com: 这个路由,怎么看着像:Index/Index啊。。。
这个路由,怎么看着像:Index/Index啊。。。