Использование asp.net в HTML-страницах - PullRequest
0 голосов
/ 27 октября 2011

Если я хочу объединить код asp.net с файлом html (разметка), мне нужно открыть <%%> и выполнить код.

Что, если я хочу перебрать базу данных с запросом выбора при подаче информации и создании строк. Например:

<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)? или я должен как-то привязать данные к метке? (понятия не имею, но как-то)?

Ответы [ 6 ]

3 голосов
/ 27 октября 2011

Если вы пытаетесь взять набор данных и отобразить его в таблице, попробуйте использовать элемент управления, например GridView или Repeater .

2 голосов
/ 27 октября 2011

Первая и самая важная вещь - не смешивайте бизнес-логику и функциональные возможности доступа к данным с разметкой представления данных!

Если вы используете WebForms, вы можете использовать Repeater control , который связанв коде страницы / элемента управления (aspx.cs / ascx.cs), поэтому View остается отделенным и просто привязанным к определенным свойствам источника данных:

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();
2 голосов
/ 27 октября 2011

Я предлагаю использовать 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>

В качестве альтернативы, используйте GridView, хотя я считаю, что Repeater дает вам больше контроля над испускаемой разметкой.

1 голос
/ 27 октября 2011

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

 <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>

и в вашем коде

userRepeater.DataSource = dataset.Tables["empoloyees"];
userRepeater.DataBind();

для получения списка всех типов <%%> возьмите посмотрите здесь

1 голос
/ 27 октября 2011

Вы почти у цели.Попробуйте это:

<table>

<%
   foreach(DataRow dr in dataset.Tables["empoloyees"].Rows)
   {
%>
<tr>
<td>
      <%= dr[FirstName].toString(); %>
</td>
<td>
      <%= dr[LastName].toString();%>
</td>
</tr>
<%
   }
%>
</table>
0 голосов
/ 27 октября 2011

Вам не нужно использовать <%%> вообще. Просто поместите ваш код между тегами с помощью runat = "server", а затем используйте стандартные теги ASP.NET (например, asp: TextBox runat = "server"). Просто убедитесь, что это * .aspx страница.

FWIW, ваш вопрос мне кажется немного задом наперед. Если вы создаете * .aspx страницы, вы можете просто использовать стандартный HTML где угодно. Если вы пытаетесь каким-то образом втиснуть ASP.NET в страницу * .html, то вы неправильно понимаете, как работает ASP.NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...