使用DataBinder.Eval时,ListViewDataItem不包含名称为“CommentId”的属性

问题描述 投票:0回答:1

我有一个ListView,显示用户对特定新闻文章的所有评论。

我需要每个评论的评论和作者的ID,所以我可以在旁边显示一个删除按钮(如果它是由相应的用户创建)。

问题是行DataBinder.Eval(dataItem, "CommentId")抛出以下错误

System.Web.UI.WebControls.ListViewDataItem'不包含名为'CommentId'的属性。

我也试过从CommentId更改为Comments.CommentId,但没有运气。

我做错了什么?任何帮助表示赞赏。

谢谢!

在News.aspx中

<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1" OnItemDataBound="ListView1_ItemDataBound">

                    <ItemTemplate>
                        <span style="">
                            <table>
                                <tr>
                                    <td style="width=60px">
                                        <asp:Label Text='<%# Eval("UserName") + ":"%>' runat="server" ID="UserNameLabel" Font-Bold="true" /><br />
                                    </td>
                                    <td>
                                        <asp:Label Text='<%# Eval("body") %>' runat="server" ID="bodyLabel" /><br />

                                    </td>
                                    <td>
                                        <asp:Button ID="DeleteCommentButton" runat="server" Text="Delete" OnClick="DeleteCommentButton_Click" />
                                    </td>
                                </tr>
                            </table>
                            <br />
                        </span>
                    </ItemTemplate>

                    <LayoutTemplate>
                        <div runat="server" id="itemPlaceholderContainer" style=""><span runat="server" id="itemPlaceholder" /></div>
                        <div style="">
                        </div>
                    </LayoutTemplate>

                </asp:ListView>
                <asp:SqlDataSource runat="server" ID="SqlDataSource1" ConnectionString='<%$ ConnectionStrings:DefaultConnection %>' SelectCommand="SELECT Comments.CommentId, Users.UserId, Comments.body, Users.UserName FROM Comments INNER JOIN Users ON Comments.UserId = Users.UserId WHERE NewsId = @NewsId">
                    <SelectParameters>
                        <asp:Parameter Name="NewsId" Type="Int32" />
                    </SelectParameters>
                </asp:SqlDataSource>

在News.aspx.cs中:

protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        if (e.Item.ItemType == ListViewItemType.DataItem)
        {
            ListViewDataItem dataItem = (ListViewDataItem)e.Item;

            int commentId = (int)DataBinder.Eval(dataItem, "CommentId");
...
c# asp.net listviewitem
1个回答
0
投票

我这样解决了:

ListViewDataItem dataItem = e.Item as ListViewDataItem; 
int commentId = (int)DataBinder.Eval(dataItem.DataItem, "CommentId");
Guid authorId = (Guid)DataBinder.Eval(dataItem.DataItem, "UserId");
© www.soinside.com 2019 - 2024. All rights reserved.