ASP.NET 4 Beta 1: WebForms Μέθοδοι επέκτασης (ελληνικά (Greek))

ASP.NET 4 Beta 1: WebForms Μέθοδοι επέκτασης

Sunday, 14 March 2010

//

4 minute read

Όταν προσθέσαμε WebForm routing στο ASP.NET 4 Beta 1, δεν είχαμε την ευκαιρία να προσθέσουμε σε δύο μεθόδους που κάνουν τη συνεργασία με Routes και Web Forms πολύ πιο εύκολη!

Σημείωση: ο παρακάτω κωδικός είναι παρόμοιος με εκείνον που προσθέτουμε στο 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:  

Λοιπόν, πώς χρησιμοποιείς αυτές τις μεθόδους;

Αυτές οι επεκτάσεις προσθέτουν μερικές απλές μεθόδους:

MapRoute

Κλάπηκε ξεδιάντροπα από MVC. Αυτές οι μέθοδοι παρέχουν ένα σύντομο δρόμο για τον καθορισμό Δρομολόγια για WebForms.

RouteCollection.MapRoute(sring name, string url, string naturalFile) ·

Για παράδειγμα, για να χαρτογραφήσετε μια απλή διαδρομή μπορείτε τώρα να κάνετε:

Πίνακας Διαδρομής.Δρομολόγια.ΧάρτηςΔρομολόγιαΠροϊόνταΛεπτομέρειεςΔρομολόγιαΔρομολόγησης,Προϊόντα/Προϊόντα,Λεπτομέρειες Προϊόντος.aspx

Επίσης έχει ένα ζευγάρι των παραλλαγών που επιτρέπουν τον καθορισμό προεπιλογών κλπ

RouteCollection.MapRoute(sring name, string url, string naturalFile, object defaults) ·

RouteCollection.MapRoute(sring name, string url, string naturalFile, object defaults, string[] χώρους ονομάτων) ·

GetRouteForUrl

Page.GetUrlForRoute(string routeName, RouteValueDictionary parameters),

Χρησιμοποιώντας μια συγκεκριμένη διαδρομή και το RouteValueDictionary που περιέχει μια σειρά παραμέτρων θα σας δώσει πίσω μια συμβολοσειρά που περιέχει το URL για να χρησιμοποιήσετε.

π.χ.,

<asp:hyperlink ID="HyperLink1" runat="server"  NavigateUrl='<%# Page.GetUrlForRoute("ProductDetailsRoute",new RouteValueDictionary( new {productid= Eval("ProductID")}))%>'  Text="Details"></asp:hyperlink>

Page.GetUrlForRoute(RouteValueDictionary parameters),

Το ίδιο πράγμα, αλλά το auto ταιριάζει με τις παραμέτρους RouteValueDictionary έναντι μιας διαδρομής

ΑγνοήστεRoute

Σας επιτρέπει να καθορίσετε urls που δεν πρέπει να δοκιμαστεί για αγώνες ενάντια διαδρομές (μπορεί να είναι χρήσιμη για την αναβάθμιση εφαρμογών WebForms)

RouteCollection.IgnoreRoute(string url),

RouteCollection.IgnoreRoute(string url, περιορισμοί αντικειμένων),

Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.