之前章节已经介绍了,如何创建自定义页面,这章通过一个实例讲解模板中如何获取url中的关键参数。
项目要求:当用户输入http://www.domain.cn/news/tag-1/这个地址时候,可以打开所有标签id为1的新闻页面。
根据这个地址,我们先写一个url的正则表达式,如下
^news/tag-([1-9]\d{0,8})/?$
([1-9]\d{0,8})这个部分表示标签的id,我们需要在模板中获取tag-1中的数字部分,那么模板中如何获取呢?
方法1:
通过Html.PagePath先获取到页面的路径,代码如下:
string urlPath = Html.PagePath(); //获取当前页面地址:news/tag-1/,不包含域名前缀 string[] arrayPath = urlPath.Split('/'); //分割成数组 string tagStr = arrayPath[1]; //获取数值中下标为1的部分,即:tag-1 string tagIdStr = tagStr.Replace("tag-","");//过滤掉tag-部分,得到后面的数字部分 int tagId = StringHelper.Format<int>(tagIdStr);//最后再把字符串转为数字。
为了获取url的中关键参数,模板中采用了分割,替换的方式获取最终数据,显然这种方式效率很低,下面说第二种方法,在4.0.09版本后新增的方法。
方法2:
给正则添加分组名称,直接通过名称获取。
基础知识科普:正则的分组规则: (?<name>xxx) ,下面改造一下上面的url正则,如下:
^news/tag-(?<tagId>[1-9]\d{0,8})/?$
模板中的获取方式如下:
string tagIdStr = Html.CustomViewParameter("tagId");//Html.CustomViewParameter为4.0.09新增的扩展方法 int tagId = StringHelper.Format<int>(tagIdStr);//最后再把字符串转为数字。
从上面代码可以看出到,Html.CustomViewParameter节约了很多代码量,大大提升了模板的制作效率
注:由于pageadmin的正则是写到配置文件中,所以正则中的<符号必须转义成< >符号转义成>
完整的配置如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <route urlConstraint="^news/tag-(?<tagId>[1-9]\d{0,8})/?$" viewPath="新闻中心/tag.cshtml" httpcacheSolutionId="0" title="新闻标签"></route> </configuration>