我有以下一組我用來在View中動態加載的類。下面的代碼在使用.RenderPartial調用時效果很好。使用VirtualPathProvider動態加載視圖時的參考問題
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%>
從文件系統或自定義提供程序返回相同的值。
我的模型基本上是公共類分類{ 公衆詮釋標識{獲得;設置;} 公共字符串名稱{獲取;集;} 公共字符串描述{獲取;集;} 公共範疇家長{獲得;設置; } } 我已經將Model.Category命名空間添加到Web應用程序web.config。 – 2009-10-29 12:40:35
我不確定你的意思是我的課程的完整路徑。 – 2009-10-29 12:42:16