2015-06-22 95 views
-1
<asp:Repeater ID="rptProducts1" runat="server"> 
     <ItemTemplate> 
      <div class="product_header"> 
       <asp:Label ID="prodLabels" runat="server" > 
        <p><h4><%#Eval("Name") %></h4></p> 
       </asp:Label> 
    </div> 

    <div class="left-col"> 
    <div class="img_product"> 

     <asp:Image ID="imgProduct" runat="server" ImageUrl='<%# Eval("Picture") %>' Width="200px" Height="200px"/> 

    </div> 
     </div> 

     </ItemTemplate> 
     </asp:Repeater> 

Code Behind: 

List<ProductModel> _prodObj = new List<ProductModel>(); 


        _prodObj = response.Content.ReadAsAsync<List<ProductModel>>().Result; 

        _prodObj.Where(x => x.PictureId != 0).Select(v => v.Picture = "data:image/png;base64," + Convert.ToBase64String(v.PictureBinary)); 
        var _prodname = _prodObj.Where(x=>x.Id!=0).Select(i => i.Name=""+i.Name); 
        try 
        { 
         rptProducts1.DataSource = _prodname; 
         rptProducts1.DataBind(); 
        } 
        catch (Exception ex) 
        { 

         throw; 
        } 

從數據庫中獲取數據時發生問題。想要顯示產品的名稱和圖像。在獲取記錄時'System.String'不包含屬性錯誤。'System.String'不包含屬性

在此先感謝。

回答

2

您只要我能看到你的數據綁定轉發器的String列表。

這條線將提取的字符串的列表:

var _prodname = _prodObj.Where(x=>x.Id!=0).Select(i => i.Name=""+i.Name); 

=> _prodname將等於名稱的列表。

然後,當你進行數據綁定,你有這樣一行:

Eval("Id") 

基本上是說:取當前對象(這是一個字符串),在這裏打印Id財產。但由於它是一個字符串,它沒有ID屬性,因此你的例外。

因此,在短期:結合的要顯示(完整的對象,不只是名稱),或更改視圖,不能使用根本不存在任何性質的產品清單。

UPDATE 如果你只是想顯示的一個產品,我建議您數據綁定你的控制,這樣的實例之前選擇正確的產品服務器端:

var _prodname = _prodObj.Where(x=>x.Id!=0 && x.Id == myId).FirstOrDefault().Select(i => i.Name=""+i.Name); 

..其中「myId」當然是你正在尋找的Id。

然後,您應該使用中繼器來顯示數據。你可以只用一個標籤是這樣的:

<asp:Label ID="myLabel" runat="server" /> 

// and server side you would do this: 
myLabel.Text = _prodName; 
+0

感謝先生,但是不是如何根據其單品 –

+0

所以,你只是想顯示一個產品的ID顯示名字?那麼中繼器不是做這件事的方法,因爲這個控件是用來和一系列的項目一起使用的。我只需在其中放置一個asp:標籤,然後更改其Text屬性以設置名稱。我用一個例子更新了我的答案。這有幫助嗎? –

2
prodObj.Where(x=>x.Id!=0) 

我懷疑這是失敗,因爲xstring,而不是你希望它是什麼。

你需要做一些調試,以確定x是什麼類型,然後追溯到找到它不再是你希望它是什麼。

此外,

_prodObj.Where(x => x.PictureId != 0).Select(v => v.Picture = "data:image/png;base64," + Convert.ToBase64String(v.PictureBinary)); 

LINQ被懶惰地評估,除非有列舉上述表達式無關的結果將被執行。

+0

我認爲最後一部分有點誤導。問題不是懶惰的評估,因爲它不會修改_prodObj,但返回一個新的IEnumerable(然後丟棄它)。我相信OP可能期望_prodObj被修改,並在那裏和選擇。 – Chris

+0

感謝主席先生,不過如何根據單個產品的ID顯示名稱 –

+0

@MaheshGulve請參閱Steven Lemmens對他自己的回答的評論,(除此之外,我們可能需要查看更多的代碼)。 – Richard