//控制器中的方法 public ActionResult ExhibitionIndex(string big,string small, string location, string tag, string type, string sotime, string isOver, string pageNo) { int location_ = 0, tag_ = 0, big_ = 0, type_ = 0, sotime_ = 0, isOver_ = -1, small_ = 0, pageNo_ = 1; //代码实现... //返回的页面 return Index(big_,sotime_,small_,location_,tag_,type_,isOver_,pageNo_); } //路由器中的配置 routes.MapRoute( "ExhibitionIndex", // Route name "zhanhui/{big}/{small}/{location}/{sotime}/{tag}/{type}/{isOver}/{pageNo}", // URL with parameters new { controller = "Exhibition", action = "ExhibitionIndex", big = UrlParameter.Optional, small = UrlParameter.Optional, location = UrlParameter.Optional, sotime = UrlParameter.Optional, tag = UrlParameter.Optional, type = UrlParameter.Optional, isOver = UrlParameter.Optional, pageNo = UrlParameter.Optional }, new[] { "eBuul.CESNS.WebSite.Controllers" } ); //所有的参数都是可选的
我的问题是:
怎么使用正则去匹配不同的参数?
http://xxx.com/zhanhui/big_1/shanghai/
http://xxx.com/zhanhui/shanhai/big_1/type_2
诸如此类的路径,有什么好的方法去实现参数的赋值?我目前只想到在控制器的方法里面去遍历所有的参数,然后在把每一个参数,去判断是哪个值,这样的方法好傻啊,就想知道博客园是怎么实现url的优化的,
最大的问题就是,参数不固定,可能没有,可能全部有,也可能有几个,如果参数不全,控制器里面的值,就是乱的,只能去遍历然后判断了,如果写正则表达式匹配参数的话,每次都要传递全部的参数才行,
有什么方法能解决么
恩 简单点 就是 怎么实现博客园那样的url优化?
spring mvc3 可以使用注解的方式
1 @RequestMapping("/{code}") 2 public String show(HttpServletRequest request,HttpServletResponse response,@PathVariable String code){
{code} 就是动态的数据,利用@PathVariable 得到code的值
恩谢谢关注 ,spring mvc3 是java的吧,我现在用的是.net的
@轼: 恩恩 我就是用的这种思路,但是就是我现在的代码参数太多了,传递进来,需要遍历判断值,我想 有没有什么好的解决方法?
要不你提供一个参数,然后你传入一个字符串用’-‘来拼接的字符串,然后你在服务器端进行分割 这样url就小了很多,然后你也可以通过model banding 来传递数据
恩谢谢你的关注,seo给的要求就是要像博客园那样的路径,只用一个参数不符合要求啊
http://xxx.com/zhanhui/big_1/shanghai/
http://xxx.com/zhanhui/shanhai/big_1/type_2
这2个肯定是2个路由吧...
没看懂啥意思
呃,谢谢关注,不是的,是一个路由的,只要路劲前面是< zhanhui >的就进来上面写的那个路由
参数太多了吧,如果有固定长度的几个参数的可以设置固定的路由。
也可以设置 无数参数
routes.MapRoute("Unlimited", "zhanhui/{*id}", new { controller = "Exhibition", action = "ExhibitionIndex" }); public ActionResult ExhibitionIndex(string id) { //进行分割处理 string [] par=id.Split('/'); }
恩 谢谢关注啊,如果进来做分割处理,还是要在后台做参数的判断,我现在有个问题, 如果路由器里面设置正则表达式,那么可空参数的正则怎么写,因为如果写上了可空参数的正则,参数就不是可空的了
routes.MapPageRoute("showinfo",//显示新闻 "cn/{year}/{Month}/{day}/{IDFilename}.html", "~/View/info.aspx", true, new RouteValueDictionary { { "year", "2012" }, { "Month", "1" }, { "day", "1" }, { "ID", "1" } }, new RouteValueDictionary { { "year", @"\d+" }, { "Month", @"\d+" }, { "day", @"\d+" }, { "ID", @"[\w\-]*" } }); routes.MapPageRoute("list", "list/{listCategory}/{page}", "~/View/latest.aspx", true, new RouteValueDictionary { { "listCategory", "all" }, { "page", "1" } }, new RouteValueDictionary { { "listCategory", @"[\w\-\,]*" }, { "page", @"\d+" } });// 新闻列表
谢谢关注啊, "~/View/info.aspx",?这个是?我用的是mvc3
Route里面有个Constraints,然后在Constraints里面添加验证规则(正则表达式的)
恩谢谢大侠的提点,我添加正则的时候就有个问题,不知道怎么给可空的参数添加正则,我一加上正则就不是可空的参数了....
解决了, 还是使用我的思路,但是整理了下,不使用以前旧的代码了,so ,重现写了一遍,规整了下,谢谢各位大侠的相助
请问是怎么解决的呢?
@wontonJ: 恩,不好意思,我今天才看到,写了一个简单的思路,你看看有没有参考价值吧 http://www.cnblogs.com/Fyhong/