2014-04-03 34 views
0

我有一箇中繼器以顯示訂單確認。它首先綁定到使用Entity Framework代碼生成的表。該表格包含正確的信息,中繼器顯示所有信息,除了顯示我粘貼在下面的總計的部分外。中繼器顯示錯誤的列內容

我相信這部分也能正常工作,但數量沒有。例如,如果我添加5個產品,它只會顯示一個,但如果我放置一個斷點並在調試模式下運行代碼,則會看到在數量表中插入的值是5而不是1,因此表上的數量值正確插入,但中繼報告1.

下面是代碼:

<asp:Repeater ID="rptConfirmOrder" runat="server"> 
     <ItemTemplate> 


        <fieldset class = "OrderConfirmationFieldset"><legend class ="OrderDataLegend">Order Summary</legend> 

        <td align="left" width="60%" runat="server" id="Td25"> 
         <asp:Label ID="lblQuantity" runat="server" Text="Quantity: " CssClass = "lblOrderConfirmation"> 
         </asp:Label> <%# Eval("Quantity") %> 
         <br /> 

        </td> 

         <td align="left" width="60%" runat="server" id="Td26"> 
          <asp:Label ID="lblProductName" runat="server" Text="Product Name: " CssClass = "lblOrderConfirmation"> 
          </asp:Label><%# Eval("ProductName" ,"{0:c}") %> 
          <br /> 
         </td> 
         <td align="left" width="60%" runat="server" id="Td27"> 
          <asp:Label ID="lblProductPrice" runat="server" Text="Product price: " CssClass = "lblOrderConfirmation"> 
          </asp:Label> <%# Eval("ProductPrice" ,"{0:c}") %> 
          <br /> 
         </td> 
         <td align="left" width="60%" runat="server" id="Td28"> 
          <asp:Label ID="lblSubtotal" runat="server" Text="Subtotal: " CssClass = "lblOrderConfirmation"> 
          </asp:Label> <%# Eval("Subtotal" ,"{0:c}") %> 
          <br /> 
         </td> 

         <td align="left" width="60%" runat="server" id="Td29"> 
          <asp:Label ID="lblTotal" runat="server" Text="Total: " CssClass = "lblOrderConfirmation"> 
          </asp:Label> <%# Eval("Total" ,"{0:c}") %> 
          <br /> 
         </td> 
</ItemTemplate> 
    </asp:Repeater> 

誰能幫助?

預先感謝您!

+0

請確保數據未被高速緩存。 – Win

回答

0

您的轉發器標記看起來不正確。 有它如下:

<asp:Repeater ID="rptConfirmOrder" runat="server" OnItemDataBound="rptConfirmOrder_ItemDataBound"> 
    <ItemTemplate> 
     // stuff 
    </ItemTemplate> 
</asp:Repeater> 

如果你有這樣的說法,這是一個粘貼錯誤,那就算了數據庫/實體等

您可以驗證準確,什麼價值的價值正在通過攻擊行數據綁定事件進行綁定,如下所示。

protected void rptConfirmOrder_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     var dataItem = e.Item.DataItem as YOUR_ENTITY_TYPE; 
     Debug.Assert(5 == dataItem.Quantity); 
    } 
} 
+0

謝謝你的回答!這確實是一個粘貼錯誤,中繼器包含標籤,我將要測試你的建議 – bluetxxth

+0

斷言失敗,但邏輯是正確的。問題是我使用Take(1)的sql語句的linq,但它沒有得到最後得到第一個記錄 – bluetxxth

+0

很高興你找到了根本原因。以可靠的方式獲取最後一項,按日期對結果進行「降序排序」,然後執行FirstOrDefault(); –

0

我想你可能需要在打開中繼器之後添加< itemtemplate>標籤,並在關閉中繼器標籤之前將其關閉。

+0

感謝您的回答,我的轉發器確實包含標籤,這是一個粘貼錯誤。還有什麼呢? – bluetxxth