C# 加载WebUserControl

C# 加载WebUserControl,c#,asp.net,C#,Asp.net,我正在尝试加载具有会话id的WebUserControl,例如: string loadURL = "/CPCLeadScrubExceptions.ascx?&SessionID=" + SessionId; Control control = LoadControl(loadURL); holder.Controls.Add(control); 当我执行此操作时,会出现以下错误:“虚拟路径'/cpcledscrubeexceptions.ascx?&SessionID=a545a9

我正在尝试加载具有会话id的WebUserControl,例如:

string loadURL = "/CPCLeadScrubExceptions.ascx?&SessionID=" + SessionId;
Control control = LoadControl(loadURL);
holder.Controls.Add(control);

当我执行此操作时,会出现以下错误:“虚拟路径'/cpcledscrubeexceptions.ascx?&SessionID=a545a9e1-4085-419b-aff0-1a27a76d01e4'映射到另一个应用程序,这是不允许的。”

嗯,错误非常清楚。您正在尝试加载映射到另一个应用程序的
/cpcledscrubeexceptions.ascx

例如,您的应用程序是
http://mydomain.com/myapp/Something.aspx
因此您无法访问任何不在
/myapp/
路径下的内容。您需要将您的路径更正为相对路径(首先尝试不使用“/”)


编辑:
LoadControl
采用控制路径,而不是带有查询字符串的请求URL。ASP.NET使用参数来定位要加载的控件,它本身不发出请求,因此不需要会话ID。

您提供的路径不是虚拟路径(它们以
~/
开头)

另外,会话id不应该在虚拟路径中(您在这里没有执行请求),您可以在创建控件后设置它,如
control.SessionID=SessionID

如果控件位于从中调用它的同一应用程序中,您是否尝试使用:

string loadURL = "~/CPCLeadScrubExceptions.ascx?&SessionID=" + SessionId;

(注意
~
符号。)

当我没有SessionId时,它会工作。该错误仅在添加SessionID时出现。您能否确认它只是您删除的SessionID,而不是“/”(如果确实有效,可能会发布第一行)?这似乎不太可能,但如果我使用“cpcledscrubeexceptions.ascx”,您可能是对的;它起作用了。如果我使用“cpcledscrubeexceptions.ascx?&SessionID”+SessionID;“上面说找不到文件。听起来像是你自己解决的:)我在修改后的答案中提供了一些解释。你为什么要包括SessionID?你为什么认为你需要它?