我试图通过页面方法返回用户/服务器控件的html表示形式。当我调用使用用户控件的虚拟路径的重载时,它起作用,但是当我尝试调用采用类型的重载时,它不起作用。示例代码如下。有什么建议?

[WebMethod]
public static string LoadAlternates(string productId, string pnlId)
{
    object[] parameters = new object[] { pnlId, productId };
    return ControlAsString(typeof(PopupControl), parameters);
}

private static string ControlAsString(Type controlType, object[] parameters)
{
    Page page = new Page();
    UserControl controlToLoad;
    /*
     *calling load control with the type results in the
     *stringwriter returning an empty string
    */

    controlToLoad = page.LoadControl(controlType, parameters) as UserControl;
    /*
     *However, calling LoadControl with the following overload
     *gives the correct result, ie the string rep. of the control.
    */
     controlToLoad = page.LoadControl(@"~/RepeaterSamples/PopupControl.ascx") as UserControl;

    //some more code, then this...
    page.Controls.Add(controlToLoad);

    StringWriter sw = new StringWriter();
    HttpContext.Current.Server.Execute(page, sw, false);
    return sw.ToString();
}

有什么想法为什么这个StringWriter将返回一个空字符串?我应该指出,无论选择哪种方法来调用LoadControl,所有“页面”生命周期都能正确执行。

想要添加-
我必须使用LoadControl(Type, object[])重载。 :-(

最佳答案

MSDN page for LoadControl的底部有此注释:

关于c# - 使用LoadControl方法(类型,对象[])动态加载UserControl,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/450431/

10-11 16:43