2010-03-17 114 views
0

我有我的aspx頁面Repeater控件:奇怪的中繼問題

<asp:Repeater ID="repeater" runat="server" EnableViewState="false"> 
    <ItemTemplate> 
     <%# Eval("someAttribute") %> 
    </ItemTemplate> 
</asp:Repeater> 

在Page_Load中,我有以下代碼:

if (String.IsNullOrEmpty((string)Request.QueryString["action"])) 
    s.OpenConn("SELECT * FROM someTable;"); 
else 
    s.OpenConn("SELECT * FROM someTable WHERE id=1;"); 

if (s.Read()) 
{ 
    repeater.DataSource = s.GetRead(); 
    repeater.DataBind(); 
} 

的問題是,當我進入行動=東西,數據不會顯示在頁面上。 但是,如果我刪除?行動=的東西,我得到的所有數據。

我做錯了什麼?

+1

按照第一行的斷點並逐行檢查變量一行。你會看到流量是否意外,爲什麼。 – 2010-03-17 20:11:21

回答

2

您已經閱讀並跳過if語句的第一個結果。刪除它:

if (s.Read()) 
+0

這是解決方案。 謝謝。 – lopkiju 2010-03-17 20:34:27

2

除非s提及的對象做的事情非常奇怪,我能想到的唯一原因是someTable沒有id = 1的行。您是否嘗試過直接在Sql Server Management Studio中執行第二條SQL語句?

+0

s是連接到MSSql數據庫的類的一個實例。在這一部分,一切都很好。 我試圖執行sql Management Studio,並且有一個id = 1的數據。 – lopkiju 2010-03-17 20:26:26

5

看起來你的查詢

s.OpenConn("SELECT * FROM someTable WHERE id=1;"); 

不返回任何東西。或者,你的#Eval語句返回一個空字符串。將其更改爲

<ItemTemplate> 
    <%#Eval("SomeAttribute")%> I found one! 
</ItemTemplate> 

確保您獲得某些輸出,如果中繼器的.DataSource屬性不是空列表。這樣,「我找到了一個!」即使「SomeAttribute」爲空也會顯示。

提示:

  1. 永遠,永遠永遠在.ASPX.cs直接嵌入查詢。使用存儲過程或(嘆氣)參數化查詢。

  2. 此外,不要在代碼隱藏頁面中執行任何數據庫交互。將您的數據訪問重構爲單獨的類。你以後謝謝我。 Google針對n層架構,單元測試或關注點分離進行更詳細的分析。

  3. 您不需要將.QueryString []值強制轉換爲字符串。他們已經是字符串。

  4. 坐落於

    如果(s.Read())

斷點,看看當你到達那裏會發生什麼。這將幫助您找到問題。

+0

這兩個sqls都返回記錄。這是第一件要檢查的事情。 感謝您的提示。 – lopkiju 2010-03-17 20:33:22