2011-01-09 6 views
2

Ich versuche, einen Bereich zum Ausführen von DynamicData mit Scaffolding als Verwaltungsteil zu erstellen. Es funktioniert wahrscheinlich so, wie es sollte, aber ich kann das Routing nicht zum Laufen bringen.Wie kann ich DynamicData Routen mit Mvc Routen mischen?

In meinem global.asax habe ich die folgende Funktion, um die Routen zu registrieren:

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))); 
      } 
     } 

In meinem Bereich habe ich die alle Besonderheiten Dynamic so:

public class 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, 
    }); 
} 

}

Leider ist die „beste“, was mir passiert ist, so war weit, dass, wenn ich die Standardtabellen überprüfen ich eine Meldung über (MetaModel.VisibleTables) erhalten

Message = „Wert nicht null sein kann. \ R \ nParameter Name: principal“

mit folgenden Stacktrace:

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() 

Das Problem ist, dass ich weiß nicht, warum das so ist. Ist es das Routing oder etwas anderes? Ist es vielleicht eine Sicherheitsfrage oder kann ich dynamische Daten nicht in einem Bereich speichern?

Der Ordner DynamicData selbst befindet sich im Stamm der Anwendung, da dies die Konvention ist, die es verwendet, und ich habe nicht die Absicht, diese zu überschreiben.

Edit: Ich fand this Post, aber es scheint nichts für mich zu tun.

Antwort

3

Die Lösung meiner Probleme (noch einmal von mir beantwortet) ist ein PageRoute innerhalb des Admin-Bereich Registrierung zu erstellen, um diese zeigen:

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

ich ein ähnliches Problem hatte. Ich liebe, wie dynamische Daten automatisch datengesteuerte Formulare für Sie erstellen können, aber ich liebe auch das saubere Design einer MVC-App. Ich entschied mich schließlich, dynamische Daten aus meinem Projekt zu löschen und MVC nur die Seiten mit Dynamic MVC generieren zu lassen.

http://dynamicmvc.com