2013-02-19 3 views
0
StringBuilder str=new StringBuilder(); 
str.Append("<div style='font-style:oblique;font-size:24px;text-align:left;margin-bottom:25px;'>"); 
str.Append("Products"); 
str.Append("</div>"); 
str.Append("<div style='font-style:oblique;font-size:18px;text-align:right;margin-bottom:25px;'>"); 
str.Append("<asp:TextBox ID='txtSearch' runat='server'></asp:TextBox> &nbsp;&nbsp; <asp:Button ID='btbSearch' runat='server' Text='Search'/>"); 
str.Append("</div>"); 
str.Append("<table width='100%' border='1' cellpadding='0' cellspacing='0'>"); 

Во втором <div>, я пытаюсь создать текстовое поле и кнопку, и добавить их в заполнителе. Когда я отлаживаюсь с помощью консоли браузера, я вижу их в html-коде, но он не может отображаться в браузере, он просто показывает таблицу в браузере. Есть ли какой-нибудь пример для работы с этими случаями?создать форму в заполнителе в C#

ответ

2

<asp: теги являются полностью серверными тегами. Они будут переведены движком ASP в простые HTML-теги.

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

Вы должны создавать элементы управления как объекты, а не как строки, например:

TextBox txtSearch = new TextBox(); 
txtSearch.ID= "txtSearch"; 
placeHolder1.Controls.Add(txtSearch); 

Button btbSearch = new Button(); 
btbSearch.ID = "btbSearch"; 
btbSearch.Text = "Search"; 
placeHolder1.Controls.Add(btbSearch); 

Или, еще лучше, вы можете поместить этот текст в файле разметки, а не используя код позади.

+0

thankyou very Mr/Miss Servy – 2013-02-19 17:00:10

3

Скорее всего, вы не создаете страницу ASPX для рендеринга на сервере, а скорее отправляете вывод своего StringBuilder в браузер. Поскольку asp:TextBox и аналогичные элементы ASP.Net не могут быть отображены браузером, вы ничего не видите в представлении (также присутствуют узлы, поскольку они не делают HTML полностью недействительным).

Вы хотите сгенерировать <INPUT...> элементов вместо asp:TextBox, чтобы просмотреть выходные данные в браузере.

Примечание: существует, вероятно, лучший способ достижения вашей цели (например, шаблоны клиентской стороны или регулярный рендеринг в представлении), но сначала вам нужно задать свою актуальную проблему.

0

Вы можете использовать код, как этот

var tableBody=""; // here you have to define the table body yourself 

var form= 
    new { 
     [email protected]"get", // decide for your request method get/post 
     [email protected]"http://www.google.com" // the page processes the request 
    }; 

var [email protected]" 
<div style='font-style: oblique; font-size: 24px; text-align: left; margin-bottom: 25px'>Products</div> 

<div style='font-style: oblique; font-size: 18px; text-align: right; margin-bottom: 25px'> 
    <form method='"[email protected]"' action='"[email protected]"'> 
     <input id='txtSearch' name='txtSearch'> 
     &nbsp;&nbsp; 
     <input type='button' id='btbSearch' text='Search' onclick='this.parentNode.submit();'> 
    </form> 
</div> 

<table width='100%' border='1' cellpadding='0' cellspacing='0'>"[email protected]" 
</table> 
"; 

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

Что нужно делать сами в комментариях к коду. Обратите внимание, что txtSearch предоставляется не только id, но также и name.

+0

Весь смысл использования ASP заключается в том, что вам не нужно делать такие вещи; он будет выполнять большую часть утомительной работы. – Servy

+0

@Servy: иногда –

+0

Так в чем же преимущество, которое вы получаете от прямого генерирования HTML вместо использования ASP в этом контексте? Какую проблему вы пытаетесь решить, что ASP не может? – Servy

Смежные вопросы