#asp.net #asp.net-mvc #dynamic-data #scaffolding
#asp.net #asp.net-mvc #dynamic-data #скаффолдинг
Вопрос:
Я объединил MVC и DD, создав новый проект DD и добавив материал MVC (ссылки, маршрутизацию, использование и т.д.).
В списке таблиц в default.aspx (из DD) будут показаны все таблицы, включая таблицы с [ScaffoldTable(false)]. URL-адреса таблиц со Скаффолдом==true имеют ожидаемую форму (DD/TableName/List.aspx). Однако URL-адреса таблиц, которые не должны отображаться, находятся в форме / Home/List?Таблица=имя_таблицы.
Если вы не учитываете маршрутизацию MVC (Routes.MapRoute) тогда таблицы со скаффолдом (false) не отображаются. Или вы можете не указывать только параметры по умолчанию.
Я предполагаю, что динамические данные определяют, видна ли таблица, проверяя, можно ли проложить маршрут к странице списка. DynamicDataRoute не будет соответствовать, потому что это не сгенерирует маршрут, если Scaffold==false. НО ТОГДА маршрут MVC будет совпадать из-за параметров по умолчанию в конце.
Я прав, и это ошибка, или я полностью что-то здесь упускаю?
РЕДАКТИРОВАТЬ: Я исправил это, добавив фильтрацию видимых таблиц в Scaffold следующим образом, но это обходной путь…
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:
Несколько более чистым решением было бы добавить ограничение к вашему маршруту MVC, чтобы оно не совпадало при указании ‘Table’ . например, что-то вроде:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { Table = "" }
);
Комментарии:
1. Это работает как лучшее решение, чем у меня было. Команда Скотта Хансельмана подтвердила, что это ошибка, поэтому, возможно, она будет исправлена в будущей версии.