▲请教各位高手一个关于用户控件动态载入的问题!各位DX请进来看看!
假设现在有如下文件
index.aspx
basepage.cs
/scheme/index.ascx
我想在用户访问index.aspx的时候将请求转发给/scheme/index.ascx,于是我在
index.aspx中使用
Control MyControls=LoadControl("./Scheme/index.ascx");
this.Controls.Add(MyControls);
来将/scheme/index.ascx加载到了index.aspx中,但这样做的话,每个.ascx必须有一
个对应的.aspx,对于以后的扩展很不方便
于是又采用了IHttpHandler来实现
利用IHttpHandler将*.aspx的请求全部交给了basepage.cs来执行
而basepage.cs中则分析了url中的aspx文件名,然后用与上面同样的方法来加载了
/scheme/index.ascx
问题出来了,以前的方法,没有任何问题,但换成basepage.cs来处理请求的时候出现
如下错误:
System.Web.HttpException: 虚拟路径“/Scheme/Index/index_list.ascx”映射到另
一个应用程序,这是不允许的。
问了问波仔,只要设置到网站根目录下,别用虚拟目录就可以了,可比较现实的
是,不是谁都可以放到根目录下或者开端口或者新开虚拟主机,很多时候用户只能建立一个虚拟目录而已,想请教各位高手,此问题如何解决?
详细错误信息如下:
源错误:
行 61: AscxName=AscxName+"_"+ClassInfo["ListMode"].ToString();
行 62: }
行 63: Control MyControls =
LoadControl("./Scheme/"+ClassInfo["Scheme"]+"/"+AscxName+".ascx");
行 64: this.Controls.Add(MyControls);
行 65: //MyControls.Page.DataBind();
源文件: d:\web_root\exs\exspage.cs 行: 63
堆栈跟踪:
[HttpException (0x80004005): 虚拟路径“/Scheme/Index/index_list.ascx”映射到
另一个应用程序,这是不允许的。]
System.Web.HttpRequest.MapPath(String virtualPath, String baseVirtualDir,
Boolean allowCrossAppMapping) +472
System.Web.UI.TemplateControlParser.CompileAndGetParserCacheItem(String
virtualPath, String inputFile, HttpContext context) +98
System.Web.UI.TemplateControlParser.GetCompiledType(String virtualPath,
String inputFile, HttpContext context) +13
System.Web.UI.UserControlParser.GetCompiledUserControlType(String
virtualPath, String inputFile, HttpContext context) +177
System.Web.UI.TemplateControl.LoadControl(String virtualPath) +41
Exs.Aspx.ExsPage.Page_Load(Object sender, EventArgs e) in
d:\web_root\exs\exspage.cs:63
System.EventHandler.Invoke(Object sender, EventArgs e) +0
System.Web.UI.Control.OnLoad(EventArgs e) +67
System.Web.UI.Control.LoadRecursive() +35
System.Web.UI.Page.ProcessRequestMain() +720