뷰에서 동적으로로드하는 데 사용한 클래스 집합이 있습니다. 아래 코드는 .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 파일에두면 동일한 코드가 작동합니다.
뭔가가 누락되었습니다. <%=AppDomain.CurrentDomain.ApplicationIdentity%>
은 파일 시스템이나 사용자 지정 공급자에서 동일한 값을 반환하기 때문에 파일 시스템이나 사용자 지정 VirtualPathProvider에서 오는 스트림이 더 비슷합니다.로드 된 어셈블리가 있어야합니다.
내 모델이다 기본적으로 공용 클래스 카테고리 { 공공 INT 이드가 {얻을; 설정;} 공공 문자열 제목 {얻을; 설정;} 공공 문자열 설명 {얻을; 설정을} 공공 부문의 부모 {얻을; 설정; } } 웹 응용 프로그램 web.config에 Model.Category 네임 스페이스를 추가했습니다. –
내 수업의 전체 경로가 무엇을 의미하는지 확신 할 수 없습니다. –