기본적으로 사용하여 복잡한 일을 할 것이기 때문에, 귀하의 경우 Test
에 실제 Test.aspx
클래스의 부모 (즉, ASPX 파일입니다 필요 Test
을 상속받은 클래스로 컴파일됩니다. 그들은 거의 동등한있어,
BuildManager.CreateInstanceFromVirtualPath("~/Test.aspx", typeof(Test));
또는 무랄리 Murugesan 제안대로 PageParser.GetCompiledPageInstance
를 사용할 수 있습니다
가
Test.aspx
인스턴스를 얻으려면 하나의 옵션은 직접 컴파일러를 사용하는 것입니다.
실제로 지원되지는 않습니다 ("이 API는 .NET Framework 인프라를 지원하며 사용자 코드에서 직접 사용할 수 없습니다.")하지만 대부분 작동합니다.
class LuPageHandlerFactory : PageHandlerFactory
{
public static LuPageHandlerFactory Instance = new LuPageHandlerFactory();
private LuPageHandlerFactory() { }
}
// Which lets me call this:
var handler =
LuPageHandlerFactory.Instance.GetHandler
(
HttpContext.Current, null, "~/Test.aspx", null
) as Test;
클리너 접근 방식은 HttpContext.Current.RewritePath("~/Test.aspx");
을 사용하고 HttpContext.Current.Items
에 데이터를 전달하는 것입니다 : 사실은 훨씬 더 안정되어 내 코드에서 기본 PageHandlerFactory
로 전환했습니다.
내 엔진은 실제로 내가 대체로 언급 한 마지막 접근 방식을 사용합니다. LuPageHandlerFactory
접근 방식이 SecurityException
을 throw하면 나는 RewritePath
으로 폴백합니다. HttpCompileException
도 처리해야합니다.
@Serge의 컴파일 된 인스턴스를 얻을 수 있습니다, 당신은 더 설명해주십시오 수 있습니다. 잘 모르겠어요 –
잘 작동합니다. 나는 당신의 솔루션이 Luaan의 솔루션보다 더 낫다. 왜냐하면 당신의 솔루션은 URL을 알 필요가 없기 때문이다. – Serge
@ Serge, 당신은 환영합니다 :) –