Использование asp.net на HTML-страницах

#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 . Но предполагая, что если бы я хотел это сделать .. мог бы я ,, таким образом?