Может ли 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;
}