Я пробовал это только в отдельных областях проекта. Так что, если кто-то попробует это в мультипроектном решении, пожалуйста, сообщите нам.
Поддержка области была добавлена в 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
Это позволит найти и использовать созданные вами виды в ваших регионах.
Это одно из возможных решений, которое позволяет мне сохранять представления в указанной области. У кого-нибудь есть другое, лучшее, улучшенное решение?
Спасибо