2013-07-26 35 views
0

希望今天在您正在使用的任何項目上有一個良好的開端。今天我開始着手解決一個有趣的問題,我需要解決一個涉及到ASP.net中的嵌套式中繼器(從SQL數據庫獲取數據以構建與教育和福利有關的授權數據的網頁結果)。嵌套中繼器拼圖:在嵌套查詢中使用從(外部)查詢返回的數據

我有它使用SQL查詢拉回根據我在SQL表中特定的列數據,類別列一箇中繼器:

<asp:SqlDataSource ID="SqlDataSourceGrantCategories" runat="server" 
ConnectionString="<%$ ConnectionStrings:KenticoCMSECommerceTestingConnectionString %>" 
SelectCommand="SELECT * FROM [customtable_SampleTable] ORDER BY Category"> 
</asp:SqlDataSource> 

現在我想有一個額外的,嵌套的中繼器它有另一個向它提供數據的查詢,但是這個內部中繼器將它的查詢從第一個中繼器所提取的Category列(從SQL表)中查詢出來。以下是我迄今爲止:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSourceGrantCategories"> 
    <ItemTemplate> 
    <%# Eval("Category") %> //I just need this piece of data, but used below. 
    <br /> 
     <asp:Repeater ID="Repeater2" runat="server" DataSourceID="SqlDataSourceGrantInfo"> 
     <asp:SqlDataSource ID="SqlDataSourceGrantInfo" runat="server" ConnectionString="<%$ ConnectionStrings:KenticoCMSECommerceTestingConnectionString %> 
    SelectCommand="SELECT * FROM [customtable_SampleTable] WHERE Category = <%# Eval('Category') %>"> 
    <ItemTemplate> 
    <%# Eval("Title") %> 
    </ItemTemplate> 
    </asp:Repeater> 
    <br /> 
    </ItemTemplate> 
</asp:Repeater> 

所以基本上,第二里面的eval語句,嵌套的SqlDataSource沒有被正確的評估,它給我它說「服務器標籤不規範的錯誤」。有沒有什麼辦法讓我使用或創建一個變量等於第一個Eval(「Category」)語句,然後我可以在我的第二個SQL查詢字符串中使用它?

對不起,如果這是令人困惑,我很樂意詳細闡述如果需要進一步。

回答

2

夫婦的事情,應該被固定在這裏:後ConnectionString屬性

  1. 錯誤"Server tag not well formed"是由於錯過了雙引號。
  2. 請記住,<%# %>內的所有內容都必須是有效的C#代碼,這意味着如果您使用的是字符串 - 則應將其放在雙引號中。這裏引用的典型模式是AttributeName='<%# Eval("Property")%>'SelectCommand的值並非如此。
  3. 當您需要使用文字和邊界數據進行操作時(例如在此處的select查詢中),最好將整個表達式包含在servlet標記中並在其中執行必要的轉換。

總而言之,這裏是結果:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSourceGrantCategories"> 
    <ItemTemplate> 
     <%# Eval("Category") %> 
     <br /> 
     <asp:SqlDataSource ID="SqlDataSourceGrantInfo" runat="server" ConnectionString="<%$ ConnectionStrings:KenticoCMSECommerceTestingConnectionString %>" 
      SelectCommand='<%# "SELECT * FROM [customtable_SampleTable] WHERE Category =" + Eval("Category") %>' /> 
     <asp:Repeater ID="Repeater2" runat="server" DataSourceID="SqlDataSourceGrantInfo"> 
      <ItemTemplate> 
       <%# Eval("Title") %> 
      </ItemTemplate> 
     </asp:Repeater> 
     <br /> 
    </ItemTemplate> 
</asp:Repeater> 

最後它會更好,有幾個原因,使用SelectParameters,而不是直接插入Category值到查詢。

+0

謝謝安德烈,非常好的答案,我現在將看看並使用此代碼。我會考慮使用SelectParameters,但是tbh我不知道那是甚麼。我猜還是一個ASP新手。再次感謝! – DNAInstant

+0

@ user2390929,找出SelectParameters,看看IntelliSense將你建議爲「」的內部標籤。 – Andrei

+0

Andrei,看起來像你的代碼工程。我知道這是簡單的,我在這裏失蹤了,就像在那裏使用C#代碼構建整個字符串,而不是僅僅採用單一值。那就是在那裏解決問題的方法,好的想法和好的解決方案。 – DNAInstant