2010-10-07 2 views
0

Мне нужно использовать маршрутизацию с параметрами в моем приложении ASP.NET.Маршрутизация в 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}}); 
    } 
} 

Затем, перейдя в «/Профиль» Я хочу, чтобы попасть на Page_Load метод Request.Params [ «Id»] в нуль и перейдя в "/Профиль/1 ", Request.Params [" Id "] как " 1 ".

Где я совершил ошибку?

+0

Вы используете маршрутизацию в ASP.NET WebForms или MVC? Я принимаю WebForms, потому что вы упомянули метод Page_Load, но просто хотели проверить. –

ответ

1

С помощью традиционных WebForms я создал два маршрута в вашем методе RegisterRoutes().

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

CustomRouteHandler выглядел примерно так:

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;  
    } 
} 
Смежные вопросы