Asp.net “System.String”不包含属性
从数据库中提取数据时出现问题。要显示产品的名称和图像。提取记录时引发“System.String”不包含属性错误Asp.net “System.String”不包含属性,asp.net,linq,Asp.net,Linq,从数据库中提取数据时出现问题。要显示产品的名称和图像。提取记录时引发“System.String”不包含属性错误 提前谢谢。您正在将中继器数据绑定到我所能看到的字符串列表中 此行将获取字符串列表: <asp:Repeater ID="rptProducts1" runat="server"> <ItemTemplate> <div class="product_header"> <a
提前谢谢。您正在将中继器数据绑定到我所能看到的字符串列表中 此行将获取字符串列表:
<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;
}
=>\u prodname将等于一个名称列表
然后,当您进行数据绑定时,您有以下行:
var _prodname = _prodObj.Where(x=>x.Id!=0).Select(i => i.Name=""+i.Name);
这实际上是说:获取当前对象,它是一个字符串,并在这里打印Id属性。但因为它是一个字符串,所以它没有ID属性,因此出现了异常
简而言之:绑定到要显示完整对象的产品列表,而不仅仅是名称,或者更改视图以不使用任何根本不存在的属性
更新
如果您只想显示一个产品,我建议您在对控件进行数据绑定之前选择正确的产品服务器端,例如:
Eval("Id")
。。。其中myId当然就是您要搜索的Id
然后,您应该使用中继器来显示数据。您可以使用如下标签:
var _prodname = _prodObj.Where(x=>x.Id!=0 && x.Id == myId).FirstOrDefault().Select(i => i.Name=""+i.Name);
我怀疑这是失败的,因为x是一个字符串,而不是您所期望的
您需要进行一些调试以确定x是什么类型,然后回溯以找到它不再是您期望的类型的位置
而且
LINQ是惰性计算的,除非有东西枚举了上述表达式的结果,否则不会执行任何操作。谢谢,先生,但是如何根据单个产品的id显示名称,所以您只想显示一个产品?那么,中继器就不是实现这一点的方法,因为该控件用于项目列表。我只需要在那里放置一个asp:label,然后更改它的Text属性来设置名称。我用一个例子更新了我的答案。这有帮助吗?我认为最后一部分有点误导。问题不在于延迟求值,而在于它不修改_prodObj,而是返回一个新的IEnumerable,然后将其丢弃。我相信OP可能希望用where和select来修改_prodObj。谢谢,先生,但不知道如何根据单个的id显示名称product@MaheshGulve请参阅Steven Lemmons对自己答案的评论,除此之外,我们可能还需要更多地了解您的代码。
<asp:Label ID="myLabel" runat="server" />
// and server side you would do this:
myLabel.Text = _prodName;
prodObj.Where(x=>x.Id!=0)
_prodObj.Where(x => x.PictureId != 0).Select(v => v.Picture = "data:image/png;base64," + Convert.ToBase64String(v.PictureBinary));