Правда ли, что можно загружать View из любого места без
реализация пользовательского VirtualPathProvider
в MVC 3.0?
Если это правда, как это сделать?
В принципе, это не проблема для реализации пользовательского VirtualPathProvider
, который загружал бы
Просмотр из любого места, но моя реализация работает только в MVC 2.0 и не работает с MVC 3.0, но почему-то метод GetFile
newer вызывает не существующие представления в MVC 3.0, и в этом случае я получаю "Server Error in '/' Application.
"
Я выполнил тот же код для моего пользовательского VirtualPathProvider
отсюда: http://buildstarted.com/2010/09/28/mvc-3-razor-view-engine-without-a-controller/
ОБНОВЛЕНИЕ 1
ОК, я исправил свою проблему с помощью моего пользовательского VirtualPathProvider
после того, как я зарегистрировал первую пользовательскую первую строку поставщика VirtualPathProvider
в Application_Start()
protected void Application_Start()
{
//Should be first line before routes and areas registration.
HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
Когда регистрация пользовательского VirtualPathProvider в Global.asax.cs
после метода AreaRegistration.RegisterAllAreas();
или RegisterRoutes(RouteTable.Routes);
метода override VirtualFile GetFile(string virtualPath)
не работает для "виртуальных просмотров".
ОБНОВЛЕНИЕ 2
означает ли это, что классы RazorView
и RazorViewEngineRender
являются ответом?
ОБНОВЛЕНИЕ 3
Если у меня есть строковое представление моего вида бритвы, которого нет в файловой системе (например, я храню виды бритв в базе данных), как я могу сделать это с использованием такого подхода http://buildstarted.com/2010/09/28/mvc-3-razor-view-engine-without-a-controller/
Например, представление строки моего представления выглядит следующим образом:
"@{
ViewBag.Title = ""About Us"";
}
<h2>About</h2>
<p>
Put content here.
</p>"
ОБНОВЛЕНИЕ 4
Теперь я вижу, чтобы использовать @Html.<something>
пользовательский TemplateBase должен быть реализован.
Образец реализации HtmlTemplateBase<T>
может быть создан здесь http://www.fidelitydesign.net/?p=239, но он не будет работать с RazorEngine v2, я успешно получаю шаблон скомпилирован, то после сборки загружен метод public override void Execute()
не будет выполнен. Я получаю сообщение об ошибке: метод или операция не реализованы (stacktrace: http://tinypic.com/r/dcow4/7)
Чтобы сделать "public override T Model", я изменил объявление "public TModel Model" на "public virtual TModel Model" в "public abstract class TemplateBase: TemplateBase, ITemplate". Может быть, есть еще какие-то изменения? Или что-то в HtmlTemplateBase<T>
должно быть сделано другим способом?