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.