2013-10-07 4 views
2

Мне нужно получить HTML-код пользовательского элемента управления.Получить контроль пользователя HTML

На данный момент я использую код ниже.

// Approach 1 
HeaderControl hControl = new HeaderControl(); 

StringBuilder b = new StringBuilder(); 
HtmlTextWriter h = new HtmlTextWriter(new StringWriter(b)); 

hControl.RenderControl(h); 
string controlAsString = b.ToString(); 

// controlAsString is "" -- Doesn't work 

// ---------------------------------------------- 
// Approach 2 
UserControl uc = new UserControl(); 
HeaderControl hc = (HeaderControl)uc.LoadControl("~/Views/HeaderControl.ascx"); 

hControl.RenderControl(h); 
string controlAsString = b.ToString(); 

// controlAsString = "<h3>test data</h3> - Works. 

Можете ли вы объяснить, как я могу добиться этого с помощью подхода 1, так что я не должен жестко закодировать виртуальный путь управления.

Я также попробовал другую перегрузку uc.LoadControl()

UserControl uc = new UserControl(); 
HeaderControl hControl = (HeaderControl)uc.LoadControl(typeof(HeaderControl), null); 

// Header control has a default constructor that takes no parameters 

// but no luck :(

ответ

0

b должен быть System.IO.StringWriter. Ваш код в подходе 1 должен выглядеть следующим образом:

var hControl = new HeaderControl(); 
var strWriter = new System.IO.StringWriter(); 
var htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter); 
hControl.Rendercontrol(htmlWriter); 
string ControlAsString = strWriter.ToString(); 

Это скопировано из куска кода я написал с помощью других ответов здесь в SO, и отлично работает для меня.

+0

Спасибо, Хосе, но не повезло. var hControl = new HeaderControl(); var strWriter = new System.IO.StringWriter(); var htmlWriter = new System.Web.UI.HtmlTextWriter (strWriter); hControl.RenderControl (htmlWriter); Строка ControlAsString = strWriter.ToString(); ControlAsString по-прежнему "" – Menol

+0

Ну, я только что попробовал тот же код здесь, с новым созданным элементом управления, и он работал, как ожидалось, возвращая ''. Вы уверены, что ваш контроль фактически возвращает любой html из рендеринга? Не могли бы вы попробовать протестировать код в своей среде с помощью нового созданного элемента управления? – jose

+0

Да, Jose, Control работает, когда я использую путь для вызова. Я думаю, проблема в том, что элемент управления не загружается только потому, что он был создан. Не могли бы вы проверить свой код, чтобы убедиться, что вы делаете что-то еще, чтобы «загрузить» компонент. Если я могу спросить, можно ли отправить полный код (связанный)? – Menol