RenderControl可以输出WebControl标记而不是HTML标记吗?

时间:2011-06-08 03:06:41

标签: asp.net web-controls rendercontrol

我想利用asp.net WebControl类(TextBox,CheckBoxList,Button等)来构建一个可以使用TemplateControl.ParseControl()解析为Control的字符串。

我使用以下代码从WebControl输出HTML:

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 个答案:

答案 0 :(得分:1)

为什么不为每个所需的控件类型存储字符串,然后通过键引用它?那只是一次性的努力。

string ctrlMarkup =  GetMarkupFor("Textbox")

您可能希望更改Id和其他属性,并且应该能够在实例化之后执行此操作,并可能将其强制转换为特定类型。

或者将parseControl移动到你的getter中并返回一个现成的控件。

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