我通过创建一个新的DD项目并添加MVC内容(引用,路由,使用等)来组合MVC和DD。
default.aspx(来自DD)上的表列表将显示所有表,包括具有[ScaffoldTable(false)]的表。具有Scaffold == true的表的URL具有预期的形式(DD / TableName / List.aspx)。但是,不应显示的表的URL的格式为/ Home / List?Table = TableName。
如果省略MVC路由(Routes.MapRoute),则不会显示带有Scaffold(false)的表。或者您只能省略参数默认值。
我的猜测是动态数据通过检查是否可以为List页面建立路由来确定表是否可见。 DynamicDataRoute将不匹配,因为如果Scaffold == false,则不会生成路由。然而,由于最后的参数默认值,MVC路线将匹配。
我是否正确,这是一个错误还是我在这里完全遗漏了什么?
编辑: 我通过在Scaffold上添加过滤VisibleTables来修复它,但这是一种解决方法......
System.Collections.IList visibleTables =
MvcApplication.DefaultModel.VisibleTables.Where(o=>o.Scaffold==true).ToList();
我的RegisterRoutes在global.asax.cs:
public static void RegisterRoutes(RouteCollection routes)
{
DefaultModel.RegisterContext(typeof(studiebase2Entities), new ContextConfiguration() { ScaffoldAllTables = false });
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new DynamicDataRoute("DD/{table}/{action}.aspx")
{
Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
Model = DefaultModel
});
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
答案 0 :(得分:2)
更简洁的解决方法是在MVC路由中添加constraint,以便在指定“Table”时不匹配。例如类似的东西:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { Table = "" }
);