2011-01-09 64 views
2

我正在嘗試創建一個區域,使用腳手架作爲管理部分來運行DynamicData。它可能按照它應該的方式工作,但我無法使路由工作。如何將DynamicData路由與Mvc路由混合?

在我的Global.asax我有以下函數註冊路線:

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

      routes.MapRoute("OrderComment", "Order/{id}/comments", 
       new { controller = "Order", action = "Comments", id = 0 }, // Parameter defaults 
       new { controller = new NotEqual("Register", "Product", "Admin") }); 

      routes.MapRoute("Account", "Account/Edit/{accountId}", 
          new { controller = "Account", action = "Edit", accountId = 0 }, // Parameter defaults 
          new { controller = new NotEqual("Register", "Product", "Admin") }); 


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


      if (HostingEnvironment.IsHosted) { 
       routes.Add(new ServiceRoute("Register", new WebServiceHostFactory(), typeof(RegisterService))); 
       routes.Add(new ServiceRoute("Product", new WebServiceHostFactory(), typeof(ProductService))); 
      } 
     } 

在我的領域我把所有的DynamicData具體是這樣的:

公共類AdminAreaRegistration:AreaRegistration {

private static MetaModel s_defaultModel = new MetaModel(); 
public static MetaModel DefaultModel 
{ 
    get 
    { 
     return s_defaultModel; 
    } 
} 

public override string AreaName 
{ 
    get 
    { 
     return "Admin"; 
    } 
} 

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    DefaultModel.RegisterContext(typeof(diglifeEntities), new ContextConfiguration { ScaffoldAllTables = true }); 
    context.Routes.RouteExistingFiles = true; 
    context.Routes.Add(new DynamicDataRoute("Admin/{table}/{action}.aspx") 
    { 
     Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }), 
     Model = DefaultModel, 
    }); 
} 

}

不幸的是發生在我身上「最好」的事情,到目前爲止是,當我檢查默認表我得到一個消息有關(MetaModel.VisibleTables)

消息=「值不能爲空 。\ r \ n參數名稱:委託人」

用下面的堆棧跟蹤:

at System.Web.DynamicData.ModelProviders.TableProvider.CanRead(IPrincipal principal) 
    at System.Web.DynamicData.MetaTable.CanRead(IPrincipal principal) 
    at System.Web.DynamicData.MetaModel.IsTableVisible(MetaTable table) 
    at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext() 
    at System.Linq.Buffer`1..ctor(IEnumerable`1 source) 
    at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext() 
    at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
    at System.Web.DynamicData.MetaModel.get_VisibleTables() 

的問題是,我不知道這是爲什麼。它是路由還是其他?這可能是一些安全問題,或者我不能把動態數據放在一個區域內?

DynamicData文件夾本身位於應用程序的根目錄中,因爲這是它使用的約定,我無意重寫它。

編輯:我發現this後,但它似乎沒有爲我做任何事情。

回答

3

解決自己的問題(再次通過自己的回答)是創建一個指向該管理區登記內PageRoute:

context.Routes.MapPageRoute("Admin", 
          "admin/{pagename}", 
          "~/Areas/Admin/Default.aspx", 
          true); 
1

我有一個類似的問題。我喜歡動態數據如何自動爲您創建數據驅動的表單,但我也喜歡MVC應用程序的乾淨設計。我最終決定從我的項目中刪除動態數據,並讓MVC使用Dynamic MVC生成頁面。

http://dynamicmvc.com