Я пытаюсь вернуть 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[])
. : - (