У меня есть решение, использующее WebForms .Net 4.0. Я планирую использовать MVC3 в том же решении. Я следил за блогом Скотта Хансельмана , и дела пошли полным ходом.
Должен признать, что я новичок в этом. Однако, похоже, мне не хватает большой части того, как маршруты действительно работают в отношении пространств имен.
В настоящее время наше решение имеет следующее:
WebApplicatin:
Accounting
Receivables
ReceivablesGrid.aspx
ReceivableForm.aspx
Payables
PayablesGrid.aspx
PayablesForm
..etc.
Итак, вы можете запросить страницу, используя
Domain/Accounting/Receivables/ReceivablesGrid.aspx
Domain/Accounting/Receivables/ReceivableForm.aspx?Key=1
Domain/Accounting/Payables/PayablesGrid.aspx
Domain/Accounting/Payables/PayablesForm.aspx?Key=1
....
Я планирую добавить еще один уровень, чтобы он напоминал MVC.
WebApplicatin:
Accounting
Receivables
ReceivablesGrid.aspx
ReceivableForm.aspx
Mobile
Controllers
ReceivableConroller.cs
Models
Views
Receivables
Index
Update
Edit
Create
Payables
PayablesGrid.aspx
PayablesForm
Mobile
Controllers
PayablesConroller.cs
Models
Views
Payables
Index
Update
Edit
Create
..etc.
Конечно, это не настоящие имена . Однако я старался сделать это как можно ближе к моей ситуации. К сожалению, было бы лучше, если бы я последовал этому, потому что я мог бы использовать некоторую логику, которая могла бы быть добавлена в то же пространство имен. Более того, создание папок в корне, напоминающих контроллеры, представления, модели, не будет работать с моим решением.
В Global.asax я добавил маршрут как таковой:
routes.MapRoute(
"AccountingReceivablesMobile", // Route name
"Accounting/Receivables/Mobile/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
routes.MapRoute(
"AccountingPayablesMobile", // Route name
"Accounting/Payables/Mobile/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
Еще одно решение, которое я в итоге попробовал, - это расширение RazorViewEngine. В конструкторе нового движка я установил два следующих свойства:
base.ViewLocationFormats = new string[] { "~/Accounting/Receivables/Mobile/Views/{1}/{0}.cshtml",
"~/Accounting/Payables/Mobile/Views/{1}/{0}.cshtml"
};
base.MasterLocationFormats = new[] { "~/Views/Shared/{0}.cshtml"}.
это работало довольно хорошо. Однако я просто чувствую, что добавление этих маршрутов не очень масштабируемо, как добавление веб-формы. Моя проблема в том, что я действительно не Я не хочу добавлять маршрут для каждого возможного маршрута. Это означает, что при добавлении нового представления у меня будет другой маршрут или запись в массив. Итак, как я могу сделать это проще? Что я делаю не так? Я посмотрел на области, однако, похоже, это заставляет создать папку областей и поместить в нее.
Спасибо,