protected void Page_Load(object sender, EventArgs e)
{
dvProductInfo.DataSource = new Product[] { Product };
dvProductInfo.DataBind();
}
private Product _Product = null;
protected Product Product
{
get
{
if (_Product == null)
{
string productName = Page.RouteData.Values["ProductName"] as string;
NorthwindDataContext DataContext = new NorthwindDataContext();
_Product = DataContext.Products.Where(p => p.ProductName == productName)。SingleOrDefault();
}
return _Product;
}
}
在上面的Page_Load事件處理程序中,DetailsView控件被綁定到Product屬性返回的Product對(duì)象上。在此,Product屬性讀取Page.RouteData集合中的URL中的ProductName參數(shù)值,使用的語(yǔ)法是:Page.RouteData.Values["ProductName"].然后,在LINQ查詢中使用ProductName參數(shù)值來(lái)取回有關(guān)具體產(chǎn)品的信息。
下面的屏幕截圖顯示了運(yùn)行中的ViewProduct.aspx頁(yè)面。該網(wǎng)頁(yè)對(duì)應(yīng)的網(wǎng)址是/Products/Chai,有關(guān)該Chai的詳細(xì)信息顯示于此頁(yè)面中。
在ASP.NET 4.0中設(shè)置ASP.NET路由的過(guò)程就是這樣!但是,在ASP.NET 3.5 SP1中實(shí)現(xiàn)上述過(guò)程需要五個(gè)步驟,而不是二個(gè)步驟。
三、生成路由友好的URL
在創(chuàng)建超鏈接或者把用戶通過(guò)Response.Redirect方法從一個(gè)網(wǎng)頁(yè)導(dǎo)航到另一個(gè)頁(yè)面時(shí),使用定義于Global.asax中的路由模式(而不是使用它的實(shí)際名稱來(lái)引用ASP.NET頁(yè)面模式)是比較理想的選擇。例如,有一個(gè)ViewProducts.aspx頁(yè)面,其中有一個(gè)鏈接-通過(guò)此鏈接可以返回到顯示選定產(chǎn)品類別的所有產(chǎn)品信息,而這個(gè)產(chǎn)品類別鏈接到Categories/CategoryName,其中CategoryName是產(chǎn)品類別名,要顯示的是此類別產(chǎn)品的信息。此時(shí),你可以使用Page.GetRouteUrl方法生成這些路由友好的URL.這個(gè)方法有許多重載版本,但最簡(jiǎn)單的版本僅接收兩個(gè)參數(shù):路由名稱和參數(shù)的值。
例如,為了取得返回到Categories/CategoryName頁(yè)面的正確的URL,可以使用以下語(yǔ)法:
Page.GetRouteUrl("View Category", new { CategoryName = CategoryName });
在這里,"View Category"是定義于文件Global.asax中路由規(guī)則的名稱,而CategoryName是出現(xiàn)在URL中的CategoryName參數(shù)的值。另一個(gè)更具體的例子是:
Page.GetRouteUrl("View Category", new { CategoryName = "Beverages" });
另外,Response.Redirect方法還有另一個(gè)新的版本,名為Response.RedirectToRoute.像Page.GetRouteUrl方法一樣,這個(gè)方法能夠接收路由名稱和參數(shù)值,然后將用戶重定向到適當(dāng)?shù)摹⒙酚捎押玫木W(wǎng)址。下面的示例演示了如何將用戶重定向到一個(gè)特定產(chǎn)品的視圖:
Response.RedirectToRoute("View Product", new { ProductName = ProductName });
四、結(jié)論
ASP.NET路由是.NET框架提供的一個(gè)功能強(qiáng)大的庫(kù),通過(guò)它可以實(shí)現(xiàn)URL與底層物理文件間的徹底解耦。自從ASP.NET 3.5 SP1引入后,ASP.NET路由被初步應(yīng)用于開(kāi)發(fā)ASP.NET MVC應(yīng)用程序。雖然它也可以用于Web窗體應(yīng)用程序中,但是配置它需要繁瑣的步驟,而且看上去會(huì)造成不必要和重復(fù)的代碼。
ASP.NET 4.0中加強(qiáng)了ASP.NET路由庫(kù),并針對(duì)Web窗體應(yīng)用程序提供了更加靈活的直觀的使用場(chǎng)景支持。正如本文中你所看到的,把一個(gè)路由模式映射到ASP.NET頁(yè)面只需要在Global.asax中添加幾行代碼,而不再需要?jiǎng)?chuàng)建一個(gè)自定義的路由處理類。在底層,ASP.NET路由庫(kù)會(huì)自動(dòng)把路由參數(shù)保存到RouteData集合中-然后,你可以從Page類中訪問(wèn)它。而且,這些RouteData值也可以通過(guò)像SqlDataSource和ObjectDataSource這樣的數(shù)據(jù)源控件以聲明進(jìn)行訪問(wèn)。
![]() | ![]() .. 定價(jià):¥225 優(yōu)惠價(jià):¥213 更多書籍 |
![]() | ![]() .. 定價(jià):¥133 優(yōu)惠價(jià):¥133.0 更多書籍 |