Я только пробовал это в отдельных областях проекта. Поэтому, если кто-то попробует это в решении для нескольких проектов, пожалуйста, сообщите нам об этом.Решение для поддержки видов в однопроектных областях
Поддержка области была добавлена в MVC2. Однако представления для ваших контроллеров должны быть в вашей главной папке Views. Решение, которое я предлагаю здесь, позволит вам сохранить ваши конкретные области в каждой области. Если ваш проект структурирован, как показано ниже, с блоком, являющимся областью.
+ Areas <-- folder
+ Blog <-- folder
+ Views <-- folder
+ Shared <-- folder
Index.aspx
Create.aspx
Edit.aspx
+ Content
+ Controllers
...
ViewEngine.cs
Добавить этот код в метод Application_Start в Global.asax.cs. Он очистит ваши текущие механизмы просмотра и вместо этого использует наш новый ViewEngine.
// Area Aware View Engine
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new AreaViewEngine());
Затем создайте файл с именем ViewEngine.cs и добавьте код ниже.
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Web.Mvc;
namespace MyNamespace
{
public class AreaViewEngine : WebFormViewEngine
{
public AreaViewEngine()
{
// {0} = View name
// {1} = Controller name
// Master Page locations
MasterLocationFormats = new[] { "~/Views/{1}/{0}.master"
, "~/Views/Shared/{0}.master"
};
// View locations
ViewLocationFormats = new[] { "~/Views/{1}/{0}.aspx"
, "~/Views/{1}/{0}.ascx"
, "~/Views/Shared/{0}.aspx"
, "~/Views/Shared/{0}.ascx"
, "~/Areas/{1}/Views/{0}.aspx"
, "~/Areas/{1}/Views/{0}.ascx"
, "~/Areas/{1}/Views/Shared/{0}.aspx"
, "~/Areas/{1}/Views/Shared/{0}.ascx"
};
// Partial view locations
PartialViewLocationFormats = ViewLocationFormats;
}
protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
{
return new WebFormView(partialPath, null);
}
protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
{
return new WebFormView(viewPath, masterPath);
}
} // End Class AreaViewEngine
} // End Namespace
Это найдет и воспользуется видами, которые вы создали в своих областях.
Это одно из возможных решений, позволяющее мне просматривать виды в указанной области. У кого-нибудь еще есть другое, лучшее, расширенное решение?
Благодаря
Когда область добавления используется в папке «Области», она создает подпапку «Виды» в новой области.Вы уверены, что у вас что-то не хватает? –
Вы правы, это создаст папку «Представления». Однако эти представления должны находиться в папке «Виды» основного проекта. См. Http://forums.asp.net/p/1494640/3540105.aspx, сначала ответьте на вопрос. – 37Stars
+1 Ну, ваш подход звучит. На самом деле, я не могу себе представить, почему ребята MVC не просто включали дополнительные пути в основную сборку. Не имеет смысла. –