2010-10-07 2 views
0

Je dois utiliser le routage avec des paramètres dans mon application ASP.NET.Routage dans ASP.NET

public class Global : System.Web.HttpApplication 
{ 
    void Application_Start(object sender, EventArgs e) 
    { 
     RegisterRoutes(); 
    } 

    private void RegisterRoutes() 
    { 
     var routes = RouteTable.Routes; 

     routes.MapPageRoute(
      "Profile", 
      String.Format("{0}/{{{1}}}/", "Profile", "Id"), 
      "~/Views/Account/Profile.aspx", 
      false, 
      new RouteValueDictionary {{"Id", null}}); 
    } 
} 

Puis, en accédant à "/Profil" Je veux obtenir sur Page_Load méthode Request.Params [ "id"] comme null et en accédant à "/Profil/1 ", Request.Params [" Id "] comme " 1 ".

Où j'ai fait une erreur?

+0

Utilisez-vous le routage dans ASP.NET WebForms ou MVC? Je suppose WebForms parce que vous avez mentionné la méthode Page_Load, mais je voulais juste vérifier. –

Répondre

1

Avec les WebForms traditionnels, j'ai créé deux routes dans votre méthode RegisterRoutes().

routes.Add("profile", new Route("profile", 
    new CustomRouteHandler("~/profile.aspx"))); 
routes.Add("profileId", new Route("profile/{id}", 
    new CustomRouteHandler("~/profile.aspx"))); 

Le CustomRouteHandler ressemblait à ceci:

public class CustomRouteHandler : IRouteHandler 
{ 
    public CustomRouteHandler(string virtualPath)  
    {   
     this.VirtualPath = virtualPath;  
    }  
    public string VirtualPath { get; private set; } 

    public IHttpHandler GetHttpHandler(RequestContext requestContext)  
    {   
     string queryString = ""; 
     HttpRequest request = HttpContext.Current.Request; 

     string id = Convert.ToString(requestContext.RouteData.Values["id"]); 
     if (id.Length > 0) 
     { 
      queryString = "?id=" + id; 
     } 
     HttpContext.Current.RewritePath(   
     string.Concat(   
     VirtualPath,   
     queryString));   
     var page = BuildManager.CreateInstanceFromVirtualPath    
     (VirtualPath, typeof(Page)) as IHttpHandler;   
     return page;  
    } 
}