Может ли RenderControl выводить разметку WebControl вместо разметки HTML?

Я хотел бы использовать классы asp.net WebControl (TextBox, CheckBoxList, Button и т. Д.) Для создания строки, которую можно проанализировать в элементе управления с помощью TemplateControl.ParseControl().

Я использую следующий код для вывода HTML из WebControl:

TextBox control = new TextBox();
StringBuilder sb = new StringBuilder();
HtmlTextWriter objHtml = new HtmlTextWriter(new System.IO.StringWriter(sb));
control.RenderControl(objHtml);

Это выводит:

"<input name=\"Phone\" type=\"text\" id=\"Phone\" />"

Можно ли вместо этого вывести следующее?

"<asp:Textbox name=\"Phone\" id=\"Phone\" runat=\"server\" />"

1 ответ

Почему бы вам не хранить где-нибудь строку для каждого из необходимых вам типов элементов управления, а затем ссылаться на нее по ключу? Это будет только одноразовое усилие.

string ctrlMarkup =  GetMarkupFor("Textbox")

Возможно, вы захотите изменить Id и другие свойства, и вы сможете сделать это после создания экземпляра и, возможно, приведения его к его определенному типу.

Или переместите parseControl в ваш геттер и верните готовый элемент управления.

string id= "Button1";
string text = "Save";
Control tbx= GetControl("TextBox", id, text);

public Control GetControl(string type, string id, string text)
{
   Control ctrl;

   switch(type)
   {
      case: "TextBox"
      ctrl= (TextBox)TemplateControl.ParseControl("<asp:Textbox runat=\"server\" />");
      ((TextBox)ctrl).Id = id;
      ((TextBox)ctrl).Text = text;
      break;
   }

   return ctrl;
}
Другие вопросы по тегам