我有以下一组用于在视图中动态加载的类。下面的代码在使用 .RenderPartial 调用时效果很好。
public class VirtFile:VirtualFile
{
public VirtFile(string virtualPath) : base(virtualPath)
{
}
public override Stream Open()
{
string path = this.VirtualPath;
Stream str = new MemoryStream();
StreamWriter writer = new StreamWriter(str);
writer.Write(@"<%@ Control Language=""C#"" Inherits=""System.Web.Mvc.ViewUserControl"" %>
<%="Test"%>
");
writer.Flush();
str.Position = 0;
return str;
}
}
public class Provider:VirtualPathProvider
{
public override System.Web.Caching.CacheDependency GetCacheDependency(string virtualPath, System.Collections.IEnumerable virtualPathDependencies, DateTime utcStart)
{
return null;
var dependency = new System.Web.Caching.CacheDependency(virtualPath);
return dependency;// base.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
}
public override bool DirectoryExists(string virtualDir)
{
if (IsVirtual(virtualDir))
{
return true;
}
return base.DirectoryExists(virtualDir);
}
public override bool FileExists(string virtualPath)
{
if (IsVirtual(virtualPath))
{
return true;
}
return base.FileExists(virtualPath);
}
public override VirtualFile GetFile(string virtualPath)
{
if(IsVirtual(virtualPath))
{
return new VirtFile(virtualPath);
}
return base.GetFile(virtualPath);
}
private bool IsVirtual(string virtualPath)
{
return virtualPath.Contains("Database");
}
但是,如果我尝试将创建类型化视图的 、 更改<%="Test"%>
为<%=new Model.Category()%>
,我会收到一条错误消息,指出“找不到类型或命名空间名称‘模型’(您是否缺少 using 指令或程序集引用?)”。但是,如果将其简单地放在 .ascx 文件中,则相同的代码也可以工作。
我是否遗漏了什么,似乎流来自文件系统或自定义 VirtualPathProvider 它应该具有相同的加载程序集,因为<%=AppDomain.CurrentDomain.ApplicationIdentity%>
从文件系统或自定义提供程序返回相同的值。