asp.net-mvc-3 – 使用自定义VirtualPathProvider加载嵌入式资源部分视图
发布时间:2020-05-22 11:56:24 所属栏目: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 – 如何防止开放重定向攻击?
- asp.net – 从我的GridView行返回一个对象
- asp.net-core – 访问Raw Request Body
- asp.net – Kestrel和Katana之间的区别
- asp.net-mvc-4 – 如何开发一个ASP.NET Web API接受一个复杂
- asp.net-mvc-3 – Asp.Net MVC 3 – @ Html.Action不会呈现
- asp.net-mvc – ASP.NET MVC会话状态
- asp.net-mvc-4 – 在MVC4中捕获404错误
- asp.net-mvc – ASP.NET MVC:在回发上更改模型的属性
- asp.net-mvc – MVC ViewModel绑定构造与展平
推荐文章
站长推荐
- asp.net – 在web.config中添加程序集引用
- asp.net-mvc – 在表单提交时传递整个模型
- asp.net-mvc – 从基本控制器继承LINQ-to-SQL数据
- ASP.NET Core 2.0仅在共享文件夹中查找视图
- iis-7 – ASP.NET应用程序吃内存. Application /
- asp.net – 我应该有多少DBContext
- asp.net – IIS配置错误 – 此配置部分不能用于此
- 将linkbutton设置为asp.net中asp:panel的默认按
- asp.net-mvc – 当参数为Model时,ASP.NET MVC发布
- asp.net – JMeter测试ASP .NET网页有多好?
热点阅读
