ASP.NET 动态数据教程-URL 路由

作者:vkvi 来源:ITPOW(原创) 日期:2009-4-6

我们在访问的时候使用的是类似 /Products/Edit.aspx 的网址,实际上,我们的文件夹中并不存在 Products 这个文件夹,我们能正常使用一个不存在的文件是由于我们使用了 URL 路由的原因。

打开 Global.asax.cs,我们可以看到这么一段:

routes.Add(new DynamicDataRoute("{table}/{action}.aspx")
{
    Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
    Model = model
});

routes.Add 的参数为一个 DynamicDataRoute 对象,而该 DynamicDataRoute 对象有一个参数为 "{table}/{action}.aspx",另外还为该对象指定了两个属性值 Constraints 和 Model。使用的是 .NET Framework 3.0 及之后版本的语法

URL 定义

观察其中 {table}/{action}.aspx,这其中:“/”称为分隔符;{} 括起来的内容称为占位符,也就是说 URL 的这些部分是可变的;除开分隔符和 {} 及其中的占位符,其他的称为常量。

{} 不能连续使用,至少需要有分隔符或常量隔开,比如:

{language}{country} 不正确
{language}-{country} 正确
{language}/{country} 正确

约束

Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }) 这句表示约束,这里表示 action 只能是 List、Details、Edit、Insert 中的一个。

我们可以改一下:

Constraints = new RouteValueDictionary(new {table="Products", action = "List|Details|Edit|Insert" })

这就表示 table 只能是 Products 了,显示时就不会把 Categories 表显示出来,直接访问 /Categories/List.aspx 这样的网址也会得到 HTTP 404(如果您访问时正常显示了页面,请考虑可能是浏览器缓存)。

参数

上面的 {table}、{action} 可不可以改成我们自己想要的名字呢?

不行的,我们可以看到,上面使用的是 DynamicDataRoute 类,而不是 Route 类,DynamicDataRoute 继承于 Route,Table 和 Action 属性是 DynamicDataRoute 特有的。

另外它还有属性:

  • Model 表示所使用的数据模型,我们使用过它的 RegisterContext;
  • RouteHandler 处理路由请求的对象;
  • ViewName 与路由关联的 .aspx 页文件标识符,比如(ListDetails),如果没有为该属性指明值,则与 Action + ".aspx" 的页关联。
相关文章