Я иду орехи,
я использую MVCContrib, чтобы создать подключаемый сайт с помощью Portable Areas, и пока все работает хорошо, за исключением того, что когда я начал использовать шаблоны MVC, происходит, если я помещаю шаблоны в соответствующую папку View, он работает, примеры
HostApplication/Views/Home/DisplayTemplates/FirstName.cshtml
HostApplication/Areas/PortableArea_Blog/Views/Home/DisplayTemplates/Auther.cshtml
но на самом деле мне нужна возможность создавать общие шаблоны. Задавать и использовать их из хост-приложения или переносимой области, поэтому для этого я создал новую переносимую область, называемую DisplayTemplates (для использования возможности MVCContrib для компиляции представлений), здесь является переносимой зоной структуры
DisplayTemplates
|-Views
|-CommentTemplate.cshtml
теперь в моем хост-приложении я создал тестовую модель и добавил атрибут UIHint
public class HostModel
{
[UIHint("~/Areas/DisplayTemplates/Comment.cshtml")]
public string Name { get; set; }
}
но это не работает, поэтому я подумал, что это как-то связано с расположением частичных представлений, поэтому я создал механизм CustomView для поиска частичных представлений в этом расположении и зарегистрировал его в Global.asax, вот краткое представление о том, не утомит вас полным кодом
public class AreaViewEngine : RazorViewEngine
{
public AreaViewEngine()
{
// {0} = View name
// {1} = Controller name
// View locations
ViewLocationFormats = new[]
{
"~/Areas/DisplayTemplates/{0}.cshtml"
};
PartialViewLocationFormats = ViewLocationFormats;
AreaPartialViewLocationFormats = ViewLocationFormats;
}
protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
{
return new RazorView(controllerContext, partialPath, null, true, new[] { "cshtml" });
}
protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
{
return new RazorView(controllerContext, viewPath, masterPath, true, new[] { "cshtml" });
}
}
Что еще более странно, так это то, что кажется, что UIHint с явным расположением для Display Template не работает, вот пример
public class HostModel
{
//this works
[UIHint("FirstName")]
//this does not work
[UIHint("~/Views/Home/DisplayTemplates/FirstName.cshtml")]
public string Name { get; set; }
}
и да
FirstName.cshtml is in HostApplication/Views/Home/DisplayTemplates/FirstName.cshtml
еще раз извините за длинный пост, но я разочаровался в поиске решения, поэтому любая помощь будет полностью оценена.