Я прочитал десятки связанных потоков и сделал мой очень простой виртуальный провайдер из образцов.Есть ли какой-либо рабочий образец VirtualPathProvider в бритве mvc4?
Но он не отображает поток виртуальных файлов. просто отображая текст плана.
Вот выход.
@inherits System.Web.Mvc.WebViewPage
@{ViewBag.Title = "Hellow World !";}
<h2>Hellow World !</h2>
Там связаны темы об этом, но они не говорят, как они решили его или решение не работает. Я не могу найти, что я ошибся.
- VirtualPathProvider not parsing razor markup
- MVC3 Custom VirtualPathProvider not rendering Razor
- Pulling a View from a database rather than a file
- How to specify route to shared views in MVC3 when using Areas
- ASP.NET MVC load Razor view from database
- How to load views from a Class Library project?
и есть намного больше ...
Что случилось?
Вот мой тестовый код. (Global.asax и это все, что я изменил.)
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
System.Web.Hosting.HostingEnvironment.RegisterVirtualPathProvider(
new MyProvider());
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
}
}
public class MyProvider : VirtualPathProvider
{
public override bool FileExists(string virtualPath)
{
if (Previous.FileExists(virtualPath))
return true;
else
// ~/Infra is the test url
return virtualPath.StartsWith("/Infra") || virtualPath.StartsWith("~/Infra");
}
public override VirtualFile GetFile(string virtualPath)
{
if (Previous.FileExists(virtualPath))
return base.GetFile(virtualPath);
else
return new MyVirtualFile(virtualPath);
}
public class MyVirtualFile : VirtualFile
{
public MyVirtualFile(string virtualPath) : base(virtualPath) { }
public override Stream Open()
{
//Loading stream from seperate dll shows just plain text
//System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFile(
// System.IO.Path.Combine(HttpRuntime.BinDirectory, "Infra.dll"));
//return assembly.GetManifestResourceStream("Infra.Views.Home.Index.cshtml");
//Changed to string but also it shows plain text.
return new System.IO.MemoryStream(System.Text.ASCIIEncoding.UTF8.GetBytes(
"@inherits System.Web.Mvc.WebViewPage \r\n <h2>Hellow World !</h2>"));
}
}
}
Помните, что после каждого изменения или настройки помните RESTART IIS Express, потому что он кэширует местоположения, файлы и, по-видимому, результаты, хотя я не задал его и все такое. Я ударился головой, а затем после перезапуска IIS понял, что все это работает без существующего имени файла, без его встроенного ресурса, если у него есть «.cshtml», и я уверен, что я тоже переустановил его. Чему вы помогли мне частично создать мои решения. Уф! – ppumkin