'System.String'不包含属性

时间:2015-06-22 09:34:07

标签: asp.net linq

<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'不包含属性错误。

提前致谢。

2 个答案:

答案 0 :(得分:2)

就我所见,您正在将转发器数据绑定到String列表。

此行将获取字符串列表:

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

=&GT; _prodname将等于名称列表。

然后,当你进行数据绑定时,你就有了这一行:

Eval("Id")

本质上是说:获取当前对象(这是一个String)并在此处打印Id属性。但由于它是一个String,它没有ID属性,因此是您的例外。

简而言之:绑定到您要显示的产品列表(完整对象,而不仅仅是名称),或者将视图更改为不使用任何根本不存在的属性。

<强>更新 如果您只是想显示一个产品,我建议您在数据绑定控件之前选择正确的产品服务器端,例如:

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

...其中&#34; myId&#34;当然是你正在寻找的身份。

然后,您应该使用转发器来显示数据。您可以使用这样的标签:

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

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

答案 1 :(得分:2)

spring-session

我怀疑这是失败的,因为oauth2ClientContextprodObj.Where(x=>x.Id!=0) 而不是您期望的那样。

您需要进行一些调试以确定x的类型,然后追溯以找到它停止的位置。

另外,

string

LINQ被懒惰地评估,除非枚举上述表达式的结果,否则将不执行任何操作。