2009-07-31 66 views
2

我需要正確的Global.asax設置才能使我的動態數據站點在ASP.NET MVC項目下運行。路由目前似乎是我的問題。ASP.NET MVC應用程序路由不適用於動態數據WebForm頁面

這裏是我的Global.asax:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    MetaModel model = new MetaModel(); 
    model.RegisterContext(typeof(Models.DBDataContext), new ContextConfiguration() { ScaffoldAllTables = true }); 
    routes.Add(new DynamicDataRoute("DD/{table}/{action}.aspx") { 
     Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }), 
     Model = model 
    }); 

    routes.MapRoute(
     "Assignment", 
     "Assignment/{action}/{page}", 
     new { controller = "Assignment", action = "Index", page = "" }); 

    routes.MapRoute(
     "Default",              // Route name 
     "{controller}/{action}/{id}",         // URL with parameters 
     new { controller = "Admin", action = "Index", id = "" }); // Parameter defaults 

} 

鏈接,我想要使用的是:

http://localhost:64205/DD/Work_Phases/ListDetails.aspx

我收到以下信息:

'/'應用程序中的服務器錯誤。無法找到 資源。說明: HTTP 404.您正在查找的資源 (或其某個依賴關係)可能已被刪除,其名稱已更改爲 ,或暫時無法訪問 。請檢查URL後的 ,並確保它是 拼寫正確。

請求的URL: /DD/Work_Phases/ListDetails.aspx

我試過,因爲應用程序內的文件夾DynamicData更換DD是DynamicData且產生完全相同的結果。

+0

你試圖匹配哪條路線? – 2009-07-31 22:42:42

+0

@Adrian:我試圖去DD/Work_Phase/ListDetails.aspx但頁面不會出現。 – RSolberg 2009-07-31 22:43:31

回答

3

的URL

http://localhost:64205/DD/Work_Phases/ListDetails.aspx 

是匹配你的第二個(默認)的路線,這是試圖擊中一個名爲 「DD」 控制器。

您可能需要另一個路由條目看起來是這樣的:

routes.MapRoute(
    "DD", 
    "DD/{action}/{page}", 
    new { controller = "NameOfController", action = "Index", page = "" } 
); 

...雖然我無法想象,你爲什麼會需要通過頁面參數。命中的頁面視圖取決於控制器方法的返回操作。


對於以動態數據與ASP.NET MVC集成更好看,看看Scott Hanselman's Plugin-Hybrids article.他有關處理不屬於MVC的一部分.aspx文件的一些細節。特別是,如果你有一個.ASPX,你不想被ASP處理。NET MVC控制器,你可以安裝一個忽略路線:

routes.IgnoreRoute("{myWebForms}.aspx/{*pathInfo}"); 

應當指出的是,ASP.NET MVC配置開箱忽略磁盤上的物理存在的文件URL請求的,雖然斯科特的IgnoreRoute技術顯然更有效率。

0

對於ASP.NET MVC的工作,你將不得不匹配你嘗試訪問的URL和路由列表。

您當前的Global.asax,例如有效的網址是:

http://domain/AnyController/AnyAction/AnyParameter 
http://domain/Assignment/ 
http://domain/Assignment/AnyAction/AnyParameter 

MVC請求重定向到適當的Controller類,行動方法,以參數傳入MVC請求重定向到任何ASPX類。這是ASP.NET MVC和香草ASP.NET頁面的區別。

3

該URL與您的動態數據路由不匹配,因爲它不符合您放置的約束。你的要求行動ListDetails但只有這些動作都是允許的

Constraints = new RouteValueDictionary(
        new { action = "List|Details|Edit|Insert" } 

編輯:你確定一個動作叫ListDetails存在?然後修改上面的約束

Constraints = new RouteValueDictionary(
        new { action = "ListDetails|List|Details|Edit|Insert" } 

只是可以肯定,它是這是造成該路由被忽略的約束,你可以試試默認的動作之一?例如。

http://localhost:64205/DD/Work_Phases/List.aspx