代码之家  ›  专栏  ›  技术社区  ›  John Landheer

当结合ASP.NET动态数据和MVC元模型时。Visible包含scaffold==false的表

  •  2
  • John Landheer  · 技术社区  · 14 年前

    我通过创建一个新的DD项目并添加MVC内容(引用、路由、using等)来组合MVC和DD。

    default.aspx上的表列表(来自dd)将显示所有表, 包括 有[脚手架(假)]的。scaffold==true的表的URL具有预期的格式(dd/tablename/list.aspx)。但是,不应该显示的表的URL在表单/home/list中?table=表名。

    如果省略了MVC路由(routes.maproute),则不显示scaffold(false)表。或者您可以只保留参数默认值。

    我的猜测是,动态数据通过检查是否可以为列表页设置路由来确定表是否可见。dynamicDataRoute将不匹配,因为如果scaffold==false,它将不会生成路由。但是,MVC路由将匹配,因为最后的参数是缺省值。

    我是正确的,这是一个错误还是我完全错过了什么?

    编辑: 我通过在脚手架上添加过滤表来修复它,就像这样,但这是一个解决方法…

    System.Collections.IList visibleTables = 
       MvcApplication.DefaultModel.VisibleTables.Where(o=>o.Scaffold==true).ToList();
    

    我在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
            );
    
        }
    
    1 回复  |  直到 13 年前
        1
  •  2
  •   David Ebbo    14 年前

    一个更简单的解决方法是添加 constraint 到MVC路由,以便在指定“table”时不匹配。例如:

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new { Table = "" }
        );