2011-10-27 34 views
0

如果我想將asp.net代碼和html(標記)文件結合起來,我需要打開<%>並執行代碼。在html頁面中使用asp.net

什麼如果我想用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中)?或者我應該以某種方式將數據綁定到標籤?(不知道如何,但不知何故)?

+0

你可以在服務器端控件的標記內不使用'<%%>'。 – Oded

+0

這是ASP經典的老式時尚方法,幾乎​​...因爲geekchic建議使用中繼器或Gridview,並避免將這種標記和邏輯混合爲ASP。NET具有從代碼隱藏中分離標記的優點。 –

+0

看看你的一些評論,似乎你可能試圖避免使用ASP.NET控件,你有沒有看過ASP.NET MVC? –

回答

2

首先也是最重要的一點 - 不要將業務邏輯和數據訪問功能與數據表示標記混合!

假設你正在使用的WebForms,您可以使用Repeater control這是在代碼綁定頁/控制(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(); 
+0

謝謝,很明顯.. – Matrix001

3

如果您試圖獲取一組數據並將其顯示在表格中,請嘗試使用像 GridViewRepeater這樣的控件。

+0

不謝謝..不信任你100%..我想從sql控件免費編程 – Matrix001

+0

@ Matrix001爲什麼重新發明輪子? – geekchic

+0

我對每一個控制都不熟悉......我也可能希望在設計中更加靈活,而不是僅限於這些控件的每個標籤 – Matrix001

2

我建議使用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讓您發出的標記更多的控制。

+0

我需要閱讀更多關於Databinder ..所以你說,綁定是最好的..而不是我寫的? – Matrix001

+2

@ Matrix001 - 數據綁定更習慣ASP.NET。您可以按照您的方式使用'foreach',但這會被認爲更混亂(將迭代邏輯與標記混合在一起)。 – Oded

1

你快到了。試試這個:

<table> 

<% 
    foreach(DataRow dr in dataset.Tables["empoloyees"].Rows) 
    { 
%> 
<tr> 
<td> 
     <%= dr[FirstName].toString(); %> 
</td> 
<td> 
     <%= dr[LastName].toString();%> 
</td> 
</tr> 
<% 
    } 
%> 
</table> 
+0

嗯..感謝語法... <%=這意味着只需在屏幕上打印..對吧?人們是按照慣例使用它,還是根本不使用它?!?! – Matrix001

0

根本不需要使用< %%>。只需將代碼放在runat =「server」標籤之間,然後繼續使用標準ASP.NET標籤(例如asp:TextBox runat =「server」)即可。只要確保它是一個* .aspx頁面。

FWIW,你的問題似乎有點倒退給我。如果你正在創建* .aspx頁面,那麼你可以在任何你想要的地方使用標準的HTML。如果您試圖以某種方式將ASP.NET壓縮到* .html頁面 - 那麼您就誤解了ASP.NET的工作原理。

+0

是的,我知道,我知道它不是經典的asp.net。但假設我想這樣做......我可以這樣嗎? – Matrix001

1

您應該使用一箇中繼器,而不是像這樣

<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(); 

爲各類< %%列表>採取look here