2

我通过创建一个新的 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) 的表。或者您可以只省略参数默认值。

我的猜测是动态数据通过检查是否可以为列表页面创建路由来确定表是否可见。DynamicDataRoute 将不匹配,因为如果 Scaffold==false 则不会生成路由。但是由于最后的参数默认值,因此 MVC 路由将匹配。

我是正确的,这是一个错误还是我在这里完全遗漏了什么?

编辑:我通过像这样在 Scaffold 上添加过滤 VisibleTables 来修复它,但这是一种解决方法......

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

我在 global.asax.cs 中的 RegisterRoutes:

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

    }
4

1 回答 1

2

一个更干净的解决方法是向您的 MVC 路由添加一个约束,以便在指定“表”时它不匹配。例如:

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        new { Table = "" }
    );
于 2010-09-03T07:55:03.303 回答