2012-05-11 122 views
1

大家好我見過url rewriting許多文章,但我沒有找到任何根據我的要求。假設我有兩個頁面Default.aspxDefault1.aspx ..在初始加載時,我想重新寫我的Default.aspx某些東西,如urlrewrite\dummy.aspx和我的Default.aspx我將有一個按鈕,當我點擊這個我要重定向到Default1.aspx我想重寫這urlrewrite\dummy1.aspxurlrewriting在asp.net按鈕單擊

我只是張貼樣本重寫,但如果有重定向可以請你幫我沒有更好的辦法..

還什麼是重寫所有的頁面,如果我有一些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

將這項工作在web應用程序,因爲我不開發我的'MVC' – Vivekh

+0

應用程序收到此錯誤'錯誤「System.Web.Routing.RouteCollection」不包含'的定義MapPageRoute'並且沒有擴展可以找到接受'System.Web.Routing.RouteCollection'類型的第一個參數的nsion方法'MapPageRoute'(是否缺少使用指令或程序集引用?) – Vivekh

+0

什麼是您的項目的.net框架版本?它應該是4.0。 [RouteCollection.MapPageRoute方法](http://msdn.microsoft.com/en-us/library/dd784594.aspx)。是的,它適用於網頁表單。 –

0

我假設你得到了改寫部分覆蓋,唯一的問題是回發,您可以設置回發到由塞汀形式的行動,這樣的「友好」 URL :

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