При объединении asp.net Dynamic Data и MVC MetaModel.Visible содержит таблицы с Scaffold == false - PullRequest
2 голосов
/ 12 августа 2010

Я объединил MVC и DD, создав новый проект DD и добавив материал MVC (ссылки, маршрутизация, использования и т. Д.).

В списке таблиц по умолчанию .aspx (из DD) будут показаны всетаблицы, , включая таблицы с [ScaffoldTable (false)].URL таблиц с Scaffold == true имеют ожидаемую форму (DD / TableName / List.aspx).Однако URL-адреса таблиц, которые не должны отображаться, имеют вид /Home/List?Table=TableName.

Если вы пропустите MVC-маршрутизацию (Routes.MapRoute), то таблицы со Scaffold (false)) не показаны.Или вы можете не указывать только значения параметров по умолчанию.

Я предполагаю, что динамические данные определяют, является ли таблица видимой, проверяя, можно ли составить маршрут для страницы списка.DynamicDataRoute не будет совпадать, потому что он не будет генерировать маршрут, если Scaffold == false.НО ТОГДА Маршрут MVC будет совпадать из-за значений параметров по умолчанию в конце.

Я прав, и это ошибка, или я что-то здесь упускаю?

РЕДАКТИРОВАТЬ: я исправил это с помощьюдобавив фильтрацию VisibleTables на Scaffold следующим образом, но это обходной путь ...

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

    }

1 Ответ

2 голосов
/ 03 сентября 2010

Несколько чище было бы добавить ограничение к вашему маршруту MVC, чтобы оно не совпадало, когда указана таблица. например что-то вроде:

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