SPSPS.net 4 Beta 1: طرق التوسع في توجيه نماذج الشبكة العالمية
عندما اضفنا نظام ويب ويب معبر إلى ASP.net 4 Beta 1، لم تتح لنا الفرصة لإضافة في بعض الطرق التي تجعل العمل مع الطرق وأشكال الويب أسهل بكثير!
ملاحظة: الرمز الوارد أدناه هو " مماثل " للرمز الذي نضيفه إلى ASP.net 4 Beta 2، * أن* رمز سيكون أعلى جودة بكثير على أية حال، هذه عينة فقط!
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Web;
5: using System.Web.Routing;
6:
7: public static class RouteExtensions
8: {
9: public static string GetUrlForRoute(this System.Web.UI.Page page, string routeName, RouteValueDictionary parameters)
10: {
11: VirtualPathData vpd= RouteTable.Routes.GetVirtualPath(null, routeName, parameters);
12: return vpd.VirtualPath;
13: }
14: public static string GetUrlForRoute(this System.Web.UI.Page page, RouteValueDictionary parameters)
15: {
16: VirtualPathData vpd = RouteTable.Routes.GetVirtualPath(null, parameters);
17: return vpd.VirtualPath;
18: }
19:
20: public static void IgnoreRoute(this RouteCollection routes, string url)
21: {
22: routes.IgnoreRoute(url, null);
23: }
24:
25: public static void IgnoreRoute(this RouteCollection routes, string url, object constraints)
26: {
27: if (routes == null)
28: {
29: throw new ArgumentNullException("routes");
30: }
31: if (url == null)
32: {
33: throw new ArgumentNullException("url");
34: }
35: IgnoreRouteInternal internal3 = new IgnoreRouteInternal(url);
36: internal3.Constraints = new RouteValueDictionary(constraints);
37: IgnoreRouteInternal item = internal3;
38: routes.Add(item);
39: }
40:
41: public static Route MapRoute(this RouteCollection routes, string name, string url, string physicalFile)
42: {
43: return routes.MapRoute(name, url, physicalFile, null, null);
44: }
45:
46: public static Route MapRoute(this RouteCollection routes, string name, string url, string physicalFile, object defaults)
47: {
48: return routes.MapRoute(name, url, physicalFile, defaults, null);
49: }
50:
51: public static Route MapRoute(this RouteCollection routes, string name, string url, string physicalFile, string[] namespaces)
52: {
53: return routes.MapRoute(name, url, null, null, namespaces);
54: }
55:
56: public static Route MapRoute(this RouteCollection routes, string name, string url, string physicalFile, object defaults, object constraints)
57: {
58: return routes.MapRoute(name, url, physicalFile, defaults, constraints, null);
59: }
60:
61: public static Route MapRoute(this RouteCollection routes, string name, string url, string physicalFile, object defaults, string[] namespaces)
62: {
63: return routes.MapRoute(name, url, physicalFile, defaults, null, namespaces);
64: }
65:
66: public static Route MapRoute(this RouteCollection routes, string name, string url, string physicalFile, object defaults, object constraints, string[] namespaces)
67: {
68: if (routes == null)
69: {
70: throw new ArgumentNullException("routes");
71: }
72: if (url == null)
73: {
74: throw new ArgumentNullException("url");
75: }
76: if (physicalFile == null)
77: {
78: throw new ArgumentNullException("physicalfile");
79: }
80: Route route2 = new Route(url, new PageRouteHandler(physicalFile));
81: route2.Defaults = new RouteValueDictionary(defaults);
82: route2.Constraints = new RouteValueDictionary(constraints);
83: Route item = route2;
84: if ((namespaces != null) && (namespaces.Length > 0))
85: {
86: item.DataTokens = new RouteValueDictionary();
87: item.DataTokens["Namespaces"] = namespaces;
88: }
89: routes.Add(name, item);
90: return item;
91: }
92:
93: // Nested Types
94: private sealed class IgnoreRouteInternal : Route
95: {
96: // Methods
97: public IgnoreRouteInternal(string url)
98: : base(url, new StopRoutingHandler())
99: {
100: }
101:
102: public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary routeValues)
103: {
104: return null;
105: }
106: }
107: }
108:
إذاً كيف تستخدم هذه الأساليب؟
ويضاف إلى هذه التمديدات عدد قليل من الطرق البسيطة:
المحتويات
هذه الطرق توفر اختصاراً لتعريف طرق أشكال ويب.
المسارCollection.MapRoute( اسم السلسلة ، سلسلة الأورل ، سلسلة المعامل الفيزيائي)؛
على سبيل المثال إلى خريطة a بسيط طريق أنت الآن يعمل:
(ب) "المنتجات/[المنتجات]، "المنتجات/ {المنتجات}"، "~/Productededtails.aspx")؛
لديه أيضاً بعض المتغيرات التي تسمح بتعريف الإفتراضات
MapRoeut( tring name, tring url, trait difaile, documents)
MMAPRount(% 1)[(أ) أسماء الأماكن؛
الحصول على روتيناً لـUrl
الصفحة. getUrlFor Route (طريقة السلسلةName, وبارامترات DreetValueDiactionary)؛
استخدام مسار مسمّى و الطريق Value معرف يحتوي على عدد من البارامترات سوف يعطيك مرة أخرى سلسلة نصية تحتوي على أورل لاستخدامها. مفيد حقا في تطبيقات البيانات!
مثلاً مثلاً،
<asp:hyperlink ID="HyperLink1" runat="server" NavigateUrl='<%# Page.GetUrlForRoute("ProductDetailsRoute",new RouteValueDictionary( new {productid= Eval("ProductID")}))%>' Text="Details"></asp:hyperlink>
الصفحة. getUrl For Roeute (Roete Value Dictionary بارامترات)؛
الشيء نفسه، لكن تلقائياً يَضِعُ الطريقَ Value Diactionary البارامترات ضدّ a طريق
الدالة الدالة الدالة
يسمح لك بتعريف الأوريلات التي لا ينبغي اختبارها لمباريات ضد الطرق (يمكن أن تكون مفيدة لتحديث تطبيقات WebForms)
TROLColection. Ignore Rote( string url);
المسارCoolection.IgnoreRoute(String url, constitutions)