- public class Global : System.Web.HttpApplication
- {
- protected void Application_Start(object sender, EventArgs e)
- {
- var defaults = new RouteValueDictionary{{"name","*"},{"id","*"}};
- RouteTable.Routes.MapPageRoute("", "employees/{name}/{id}", "~/Default.aspx", true,defaults);
- }
- }
作为MapPageRoute方法最后一个参数的RouteValueDictionary对象用于指定定义在路由模板中相应变量({name}和{id})的默认值。对于指定了默认值的路由对象,在当前请求地址的后续部分缺失的情况下,它会采用提供的默认值对该地址进行填充之后再进行模式的匹配。在如上所示的代码片断中,我们将{name}和{id}两变量的默认值均指定为“*”。对于针对URI为http://localhost:2738/employees的请求,我们注册的路由对象会将其格式成http://localhost:2738/employees/*/*,后者无疑是和定义的URL模式变现出来的模式是匹配的。
在Default.aspx页面中,我们分别采用GridView和DetailsView来显示所有员工列表和某个列表的详细信息,下面的代码片断表示该页面主体部分的HTML。值得一提的是:GridView模板中显示为员工姓名的HyperLinkField的连接采用了上面我们定义在URL模板(employees/{name}/{id))中的模式。
- <form id="form1" runat="server">
- <div id="page">
- <asp:GridView ID="GridViewEmployees" runat="server" AutoGenerateColumns="false" Width="100%">
- <Columns>
- <asp:HyperLinkField HeaderText="姓名" DataTextField="Name" DataNavigateUrlFields="Name,Id" DataNavigateUrlFormatString="~/employees/{0}/{1}" />
- <asp:BoundField DataField="Gender" HeaderText="性别" />
- <asp:BoundField DataField="BirthDate" HeaderText="出生日期" DataFormatString="{0:dd/MM/yyyy}" />
- <asp:BoundField DataField="Department" HeaderText="部门" />
- </Columns>
- </asp:GridView>
- <asp:DetailsView ID="DetailsViewEmployee" runat="server" AutoGenerateRows="false" Width="100%">
- <Fields>
- <asp:BoundField DataField="ID" HeaderText= "ID" />
- <asp:BoundField DataField="Name" HeaderText= "姓名" />
- <asp:BoundField DataField="Gender" HeaderText="性别" />
- <asp:BoundField DataField="BirthDate" HeaderText="出生日期" DataFormatString="{0:dd/MM/yyyy}" />
- <asp:BoundField DataField="Department" HeaderText="部门" />
- </Fields>
- </asp:DetailsView>
- </div>
- </form>
D