asp.net-mvc-3 – 使用自定义VirtualPathProvider加载嵌入式资源部分视图
发布时间:2020-07-22 17:12:18 所属栏目:asp.Net 来源:互联网
导读:我写了自定义VirtualFile和VirtualPathProvider实现,它们成功获取了部分视图的嵌入式资源。 但是,当我试图渲染它们会产生这个错误: 在“/ Succeed.Web / Succeed.Web.Controls.SImporter._SImporter.cshtml”的视图必须从WebViewPage或WebViewPage TModel
我写了自定义VirtualFile和VirtualPathProvider实现,它们成功获取了部分视图的嵌入式资源。 但是,当我试图渲染它们会产生这个错误: 在“/ Succeed.Web / Succeed.Web.Controls.SImporter._SImporter.cshtml”的视图必须从WebViewPage或WebViewPage< TModel>派生。 在渲染部分视图时,在常规视图内部,它如下所示: Html.RenderPartial("~/Succeed.Web/Succeed.Web.Controls.SImporter._SImporter.cshtml"); 是什么原因导致它认为这不是局部视图? 编辑:我发布我的代码为虚拟文件&虚拟文件提供程序实现为任何人绊倒寻找解决方案获得该组件工作。这个问题也将适用于那些基于问题标题。 ere是VirtualFile实现的参考: public class SVirtualFile : VirtualFile { private string m_path; public SVirtualFile(string virtualPath) : base(virtualPath) { m_path = VirtualPathUtility.ToAppRelative(virtualPath); } public override System.IO.Stream Open() { var parts = m_path.Split('/'); var assemblyName = parts[1]; var resourceName = parts[2]; assemblyName = Path.Combine(HttpRuntime.BinDirectory,assemblyName); var assembly = System.Reflection.Assembly.LoadFile(assemblyName + ".dll"); if (assembly != null) { return assembly.GetManifestResourceStream(resourceName); } return null; } } VirtualPathProvider: public class SVirtualPathProvider : VirtualPathProvider { public SVirtualPathProvider() { } private bool IsEmbeddedResourcePath(string virtualPath) { var checkPath = VirtualPathUtility.ToAppRelative(virtualPath); return checkPath.StartsWith("~/Succeed.Web/",StringComparison.InvariantCultureIgnoreCase); } public override bool FileExists(string virtualPath) { return IsEmbeddedResourcePath(virtualPath) || base.FileExists(virtualPath); } public override VirtualFile GetFile(string virtualPath) { if (IsEmbeddedResourcePath(virtualPath)) { return new SVirtualFile(virtualPath); } else { return base.GetFile(virtualPath); } } public override CacheDependency GetCacheDependency( string virtualPath,IEnumerable virtualPathDependencies,DateTime utcStart) { if (IsEmbeddedResourcePath(virtualPath)) { return null; } else { return base.GetCacheDependency(virtualPath,virtualPathDependencies,utcStart); } } } 当然,不要忘记在Application_Start()事件中的项目的Global.asax文件中注册这个新的提供者 System.Web.Hosting.HostingEnvironment.RegisterVirtualPathProvider(new SVirtualPathProvider()); 解决方法因为现在你正在从一些未知的位置提供你的视图,不再有/ Views / web.config文件,它适用于并指示你的剃刀视图的基类(< pages pageBaseType =“System.Web.Mvc.WebViewPage” )。因此,您可以在每个嵌入视图的顶部添加一个@inherits指令,以指示基类。@inherits System.Web.Mvc.WebViewPage @model ... (编辑:岳阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – ASP.Net MVC:如何根据原始的Json数据创建一
- asp.net – 如何删除日历的最后一周
- asp.net-mvc – asp.net mvc博客引擎
- asp.net – 渗透测试人员说.ASPXAUTH cookie是不安全的并且
- asp.net-core – 编译netcoreapp1.0,代码包含#if!NETSTAND
- asp.net – 我可以重新发布或携带POST数据(如果是这样,我可
- 在asp.net mvc中如何使用usercontrols来显示“岛”数据?
- asp.net-mvc-3 – 将数组传递给RouteValues,并将其渲染为粘
- asp.net – 我的HTML5的doctype是否必须在第一行?
- 如何在ASP.NET 5中添加一个TypeScript绝对类型的定义?
推荐文章
站长推荐
- asp.net-ajax – Ajax脚本管理器和母版页
- 如何为Asp.Net中的所有子文件夹注册HttpHandler?
- asp.net-mvc – asp.net MVC应该是View-Model封装
- 如何处理在MVC视图中应用程序启动和传输和显示错
- asp.net-mvc – ASP.NET MVC忽略所有url结尾的“
- VS 2015 CTP 6 Nuget Package Source
- .net – asp:GridView文本框始终返回空值
- asp.net-mvc – 使用CORS在WebAPI中将text / pla
- asp.net-mvc – 图像URL中的符号MVC导致一个潜在
- asp.net中js+jquery添加下拉框值和后台获取示例
热点阅读