2012-02-01 3 views
0

Я хочу поставить серверный контроль в Literal. Является ли это возможным? Если да, то как? Я знаю, что описание класса говорит все:Как установить серверный контроль в Literal?

Представляет HTML-элементы, текст и любые другие строки в качестве ASP.NET страницы, которые не требуют обработки на сервере

+0

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

+2

Похоже, что вы «решили» половину своей проблемы. Вы можете вернуться к шагу 0 и указать, почему вы считаете, что хотите эту функциональность. http://blogs.msdn.com/b/oldnewthing/archive/2006/03/23/558887.aspx –

ответ

1

Если у вас хотите, чтобы на стороне сервера отображался код в других элементах управления, которые, вероятно, вы хотите использовать Panel. Как уже отмечалось в комментариях, невозможно обработать буквальный текст в качестве контроля на стороне сервера.

-4
TextBox myTextBox = new TextBox(); 
YourLiteralID.Controls.Add(myTextBox); 
+0

Это будет бомбить во время выполнения. Литералы не поддерживают контроль над детьми. – Servy

0

Смешно, что это происходит, поскольку я только что просмотрел некоторые из моих старых кодов вчера. Литералы могут это сделать. Я сделал это изначально, чтобы испускать пользовательские элементы управления через вызов веб-службы из Javascript (yikes, я знаю ... это было весело), ​​но это также будет соответствовать вашим потребностям.

protected void Page_Load(object sender, EventArgs e) 
    { 
     litTest.Text = RenderUserControlAsString("WebUserControl1.ascx"); 
    } 

    private string RenderUserControlAsString(string path) 
    { 
     Page page = new Page(); 
     UserControl control = (UserControl)page.LoadControl(path); 

     //add the control to the page 
     page.Controls.Add(control); 

     StringWriter sw = new StringWriter(); 
     HttpContext.Current.Server.Execute(page, sw, true); 

     //return the rendered markup of the page, which only has our single user control 
     return sw.ToString(); 
    } 

Бросьте ваши буквальный на странице и присвоить это текстовое значение для RenderUserControlAsString («Путь к вашему пользовательскому элементу управления»). С учетом сказанного, в вашем пользовательском элементе управления вы должны обернуть дочерние элементы управления в элементе управления формой.

Надеюсь, что это поможет!

+1

Это все еще не назначает серверные элементы управления литералу. Вы только присваиваете буквальный строковый текст буквальному, вы просто используете элементы управления на стороне сервера, чтобы генерировать литеральный текст, который находится там. ASP все равно не будет обрабатывать текст внутри литерала как элементы управления на стороне сервера, а это означает, что они не будут поддерживать событие, как это делают обычные элементы управления на стороне сервера, они не будут сохраняться в состоянии просмотра и т. Д. Намного проще просто используйте панель. – Servy

+0

Чувак, я просто отвечаю на исходный вопрос. Я не предполагаю, что он на самом деле пытается сделать. –

+1

Но я хочу сказать, что вы не отвечаете на исходный вопрос. Вы не помещаете код на стороне сервера в литерал, вы только вводите буквальный контроль в литерал. Тот факт, что литерал был создан с помощью контроля на стороне сервера, а не жестко закодирован, не меняет этого. Фактический ответ на точный вопрос, заданный пользователем, в первом комментарии к OP; это невозможно. Единственное, что осталось обсудить после этого, - это альтернативные решения актуальной проблемы OP. Основываясь на отмеченном ответе OP, кажется, что нужно использовать Panel. – Servy