Загружать компонент ascx с помощью кода С#
Есть ли способ, которым я могу использовать С# для загрузки, а затем "визуализировать" элемент управления ascx?
По сути, я пытаюсь заменить встроенный ASP на функцию С#, которая вернет тот же HTML. Это позволило бы мне установить его как веб-метод, чтобы я мог обновить этот раздел страницы с помощью jQuery, используя тот же код, который сгенерировал исходный html.
Мне действительно нужен какой-то способ сделать это, и это похоже на логический маршрут.
Ответы
Ответ 1
Вам нужно создать страницу, на которой вы выполняете управление:
public static string RenderUserControl(string path)
{
Page pageHolder = new Page();
Control viewControl = pageHolder.LoadControl(path);
pageHolder.Controls.Add(viewControl);
using(StringWriter output = new StringWriter())
{
HttpContext.Current.Server.Execute(pageHolder, output, false);
return output.ToString();
}
}
Пользовательский элемент управления сам по себе не будет отображаться. (В этой статье есть некоторая связанная информация, из которой я заимствовал некоторый код).
Ответ 2
Я не пробовал это, но вы можете загрузить элемент управления с помощью функции LoadControl:
Control Example = LoadControl("~\\Controls\\MyControl.ascx");
Затем вы можете попробовать выполнить управление:
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
Example.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
Но убедитесь, что вы переопределите VerifyRenderingInServerForm и переключите EnableEventValidation на false на странице.
Забудьте, что я написал выше. Я вернулся и протестировал, и вы не можете вызвать LoadControl, потому что веб-метод является статическим. Поскольку он статичен, у вас нет объекта страницы для вызова... Это означает, что загрузка пользовательских элементов управления не выполняется динамически.
Ответ 3
Этот Объяснение должен иметь ответы, которые вы ищете. В основном вам нужно объявить элемент управления на странице, затем LoadControl в коде.
Ответ 4
Ответ Keltex был единственным, который работал у меня, так как я работал с вложенными пользовательскими элементами управления. Кроме того, если вы хотите передать параметры своему пользовательскому элементу управления, вы можете сделать это:
_MyNameSpace_MyUserControl viewcontrol = (_MyNameSpace_MyUserControl) pageHolder.LoadControl(path);
viewcontrol.MyParam = "My value";
Ответ 5
его очень просто использовать:
yourItem.Controls.Add(LoadControl("~/user control File path"));