2012-05-11 5 views
1

Привет, все, что я видел много статей на url rewriting, но я не нашел ни одного согласно моему требованию. Предположим, у меня есть две страницы Default.aspx и Default1.aspx .. При начальной загрузке я хотел бы написать свой Default.aspx на какую-то вещь, как urlrewrite\dummy.aspx, и на моем Default.aspx У меня будет кнопка, когда я нажму на нее, я переадресую на Default1.aspx Я бы хотел переписать это urlrewrite\dummy1.aspxurlrewriting in asp.net button click

Я просто разместил образцы переделок, но если есть лучший способ перенаправления пожалуйста, вы можете помочь мне ..

Кроме того, что это лучший способ, чтобы переписать все страницы, если у меня есть некоторые 20-50 страницы

мой файл global.asax

<%@ Application Language="C#" %> 
<%@ Import Namespace="System.Web" %> 
<%@ Import Namespace="System.Web.Routing" %> 
<script RunAt="server"> 

    void Application_Start(object sender, EventArgs e) 
    { 
     // Code that runs on application startup 
     RegisterRoutes(System.Web.Routing.RouteTable.Routes); 
    } 
    public static void RegisterRoutes(RouteCollection routeCollection) 
    { 
     string root = Server.MapPath("~"); 
     System.IO.DirectoryInfo info = new System.IO.DirectoryInfo(root); 
     System.IO.FileInfo[] files = info.GetFiles("*.aspx", System.IO.SearchOption.AllDirectories); 

     foreach (System.IO.FileInfo fi in files) 
     { 
      string pageName = fi.FullName.Replace(root, "~/").Replace("\\", "/"); 
      routeCollection.MapPageRoute(fi.Name + "Route", fi.Name, pageName); 
     } 

     routeCollection.MapPageRoute("DummyRouteName1", "Dummy", "~/Default2.aspx"); 
    } 

    void Application_End(object sender, EventArgs e) 
    { 
     // Code that runs on application shutdown 

    } 

    void Application_Error(object sender, EventArgs e) 
    { 
     // Code that runs when an unhandled error occurs 

    } 

    void Session_Start(object sender, EventArgs e) 
    { 
     // Code that runs when a new session is started 

    } 

    void Session_End(object sender, EventArgs e) 
    { 
     // Code that runs when a session ends. 
     // Note: The Session_End event is raised only when the sessionstate mode 
     // is set to InProc in the Web.config file. If session mode is set to StateServer 
     // or SQLServer, the event is not raised. 

    } 

</script> 

ответ

3

Вы можете добавить маршруты в файле Global.asax при запуске приложения:

protected void Application_Start(object sender, EventArgs e) 
{ 
    RegisterRoutes(System.Web.Routing.RouteTable.Routes); 
} 

private void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapPageRoute("DummyRouteName", "Dummy", "~/Default.aspx"); 
    .... 
} 

Использование:

Response.Redirect("~/Dummy"); 

В URL вы увидите: (сервер)/пустышки

Редактировать:

вот как автоматически добавлять маршруты:

// Get root directory 
string root = Server.MapPath("~"); 
DirectoryInfo info = new DirectoryInfo(root); 
// Get all aspx files 
FileInfo[] files = info.GetFiles("*.aspx", SearchOption.AllDirectories); 

foreach (FileInfo fi in files) 
{ 
    // Get relative path 
    string pageName = fi.FullName.Replace(root, "~/").Replace("\\", "/"); 
    // Add route 
    routes.MapPageRoute(fi.Name + "Route", fi.Name.Replace(".aspx", ""), pageName); 
} 
+0

Будет ли это работать в веб-приложения, как я не развивается мое приложение в 'MVC' – Vivekh

+0

получаю эту ошибку' Ошибка \t \t 1 «System.Web.Routing.RouteCollection» не содержит определение для " MapPageRoute 'и не exte Метод nsion «MapPageRoute», принимающий первый аргумент типа «System.Web.Routing.RouteCollection», может быть найден (вам не хватает директивы using или ссылки на сборку?) ' – Vivekh

+0

Какова версия вашего проекта .net framework? Это должно быть 4.0. [RouteCollection.MapPageRoute Method] (http://msdn.microsoft.com/en-us/library/dd784594.aspx). Да, это работает для веб-форм. –

0

Я предполагаю, что вы получили, что переписаву часть покрыта и единственная проблема является постбэком, вы можете установить постбэк в «дружественный» URL по седениям действия формы, как это :

Page.Form.Action = Page.Request.RawUrl;