Я иду Орехи, Я использую MVCContrib, чтобы создать подключаемый сайт с использованием портативных областей, и все работает хорошо до сих пор, за исключением того, что, когда я начал использовать шаблоны MVC, что происходит, если я помещаю шаблоны в соответствующую папку View it, примеры
HostApplication/Views/Home/DisplayTemplates/FirstName.cshtml
HostApplication/Areas/PortableArea_Blog/Views/Home/DisplayTemplates/Auther.cshtml
но я действительно хочу создать общие шаблоны. Устанавливайте и используйте его из Host Application или Portable Area, поэтому для этого я создал новую Portable Area Called DisplayTemplates (чтобы использовать MVCContrib Ability для компиляции Views), здесь является переносной структурой области
DisplayTemplates
|-Views
|-CommentTemplate.cshtml
теперь в моем приложении-хозяине я создал тестовую модель и добавил атрибут UIHint
public class HostModel
{
[UIHint("~/Areas/DisplayTemplates/Comment.cshtml")]
public string Name { get; set; }
}
но он не работает, поэтому я подумал, что он имеет какое-то отношение к Partial Views Location, поэтому я создал механизм CustomView Engine для поиска Partial Views в этом местоположении и зарегистрировал его в 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 с явным расположением для отображения шаблона не работает, вот пример
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
снова извините за длинный пост, но я отказался от поиска решения, поэтому любая помощь будет полностью оценена.