#c# #asp.net #sql
#c# #asp.net #sql
Вопрос:
Если я хочу объединить asp.net код с помощью html-файла (разметки), мне нужно открыть <% %> и выполнить код.
Что делать, если я хочу выполнить итерацию по базе данных с помощью запроса select при подаче информации и создании строк. Например:
<table>
<%
foreach(DataRow dr in dataset.Tables["empoloyees"].Rows)
{
%>
<tr>
<td>
<asp:Label runat="Server" Text="<% dr[FirstName].toString(); %>"/>
</td>
<td>
<asp:Label runat="Server" Text="<%dr[LastName].toString();%>"/>
</td>
</tr>
<%
}
%>
</table>
Правильный ли синтаксис .. и хороша ли эта практика (она всегда используется в php)? или я должен каким-то образом привязать данные к метке?(понятия не имею, как. но как-то)?
Комментарии:
1. Вы не можете использовать
<%%>
внутри разметки элемента управления на стороне сервера.2. это такой классический старомодный подход, почти … как предложил geekchen, используйте повторитель или Gridview и избегайте такого смешивания разметки и логики, как ASP.NET имеет преимущество в том, что отделяет разметку от кода.
3. Глядя на некоторые из ваших комментариев, кажется, что вы, возможно, пытаетесь избежать использования ASP.NET элементы управления, вы заглядывали в ASP.NET MVC вообще?
4. лол.. Я знаю VBScript.. ahahaah .. MVC по тому, что я видел, — это совершенно другое животное для дизайна веб-формы.. Нужно ли мне изучать MVC .. я имею в виду, знаю ли я веб-формы.. зачем делать преобразование в дизайне.. Я также слышал, что у MVC есть недостатки в производительности .. или другие ограничения.. Я не могу вспомнить
Ответ №1:
Если вы пытаетесь взять набор данных и отобразить его в таблице, попробуйте использовать элемент управления, такой как GridView или Repeater.
Комментарии:
1. нет, спасибо .. не доверяйте этому на 100%.. Я хочу свободно программировать из элементов управления sql
2. @Matrix001 Зачем изобретать велосипед?
3. Я просто не так хорошо знаком с каждым элементом управления .. и я также мог бы захотеть быть более гибким в своем дизайне, чем ограничиваться каждым тегом, который есть у этих элементов управления
4. @Matrix001 Повторитель позволяет вам иметь полный контроль над выводом. Они не выдают никакого HTML-кода без того, чтобы вы специально не вставили его туда. Просмотр сетки очень структурирован.
5. да, это напоминает,, .. сетку .. головную боль, которую она вызвала у меня со всеми ее тегами
Ответ №2:
Первое и самое главное — не смешивайте бизнес-логику и функциональность доступа к данным с разметкой представления данных!
Предположим, вы используете веб-формы, вы можете использовать элемент управления Repeater, который привязан к коду страницы / элемента управления (aspx.cs / ascx.cs), поэтому просмотр остается отделенным и просто привязан к определенным свойствам источника данных:
ASPX:
<asp:Repeater ID="employees" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label runat="Server"
Text="<%# DataBinder.Eval(Container.DataItem, "FirstName") %>"/>
</td>
<td>
<asp:Label runat="Server"
Text="<%# DataBinder.Eval(Container.DataItem, "LastName") %>"/>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
Код, лежащий в основе: (например, Page_Load())
employees.DataSource = dataset.Tables["empoloyees"].Rows;
employees.DataBind();
Ответ №3:
Я предлагаю использовать элемент управления Repeater, если вы хотите, чтобы часть разметки повторялась и привязывалась к ней.
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
<tr>
<td> <%# DataBinder.Eval(Container.DataItem, "FirstName") %> </td>
<td> <%# DataBinder.Eval(Container.DataItem, "LastName") %> </td>
</tr>
</ItemTemplate>
</asp:Repeater>
В качестве альтернативы используйте a GridView
, хотя я считаю, что Repeater
это дает вам больше контроля над создаваемой разметкой.
Комментарии:
1. Мне нужно больше узнать об этом Databinder..so вы хотите сказать, что привязка лучше всего .. а не то, что я написал?
2. @Matrix001 — Привязка данных более идиоматична ASP.NET . Вы можете использовать
foreach
так, как у вас есть, но это считается более загроможденным (смешивание итерационной логики с разметкой).
Ответ №4:
Вы почти на месте. Попробуйте это:
<table>
<%
foreach(DataRow dr in dataset.Tables["empoloyees"].Rows)
{
%>
<tr>
<td>
<%= dr[FirstName].toString(); %>
</td>
<td>
<%= dr[LastName].toString();%>
</td>
</tr>
<%
}
%>
</table>
Комментарии:
1. хм .. спасибо за синтаксис … <%= это означает просто печатать на экране .. верно? Люди используют его по соглашению или нет вообще ?!?!
Ответ №5:
Вместо этого вы должны использовать повторитель что-то вроде этого
<table>
<asp:Repeater runat="server" ID="userRepeater" >
<ItemTemplate>
<tr>
<td><%#DataBinder.Eval(Container.DataItem,"FirstName")%></td>
<td><%#DataBinder.Eval(Container.DataItem,"LastName")%></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
и в вашем codebehind
userRepeater.DataSource = dataset.Tables["empoloyees"];
userRepeater.DataBind();
список всех типов <% %> смотрите здесь
Ответ №6:
Вам вообще не нужно использовать <% %> . Просто поместите свой код между тегами с помощью runat=»server», а затем продолжайте и используйте стандартный ASP.NET теги (например, asp:текстовое поле runat=»сервер»). Просто убедитесь, что это страница * .aspx.
FWIW, ваш вопрос кажется мне немного обратным. Если вы создаете страницы * .aspx, вы можете просто использовать стандартный HTML в любом месте, где захотите. Если вы пытаетесь как-то сжать ASP.NET на страницу * .html — тогда вы неправильно понимаете, как ASP.NET работает.
Комментарии:
1. да, я знаю,,. Я знаю, что это не классический asp.net . Но предполагая, что если бы я хотел это сделать .. мог бы я ,, таким образом?