Может ли RenderControl выводить разметку WebControl вместо разметки HTML? - PullRequest
1 голос
/ 08 июня 2011

Я хотел бы использовать классы 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 Ответ

1 голос
/ 24 июня 2011

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

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;
}
...