Повторитель привязки данных к списку <T>- не можете найти свойство T? - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть базовый повторитель как таковой:

<asp:Repeater id="BlogDisplay" runat="server">
    <HeaderTemplate>
        <table>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td valign="top" align="left" style="font-weight:bold; padding-left:3px;">
                <%# DataBinder.Eval(Container.DataItem, "Title")%>
            </td>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>

</asp:Repeater>

Когда я выполняю код, я получаю исключение: DataBinding: 'DocumentWebParts.BlogPostLost.BlogItem' does not contain a property with the name 'Title'.

This upsets me

Так что вы, вероятно, думаете, что у моего объекта BlogItem нет свойства Title - но это не так!

public class BlogItem
{
    public int Id;
    public string Body;
    public string Title;
    public string Author;
    public DateTime Published;
}

И это свойство, безусловно, устанавливается - бросив точку останова, вы увидите, что все значения установлены.

BlogItems = new List<BlogItem>();
SPListItem item;
foreach (SPListItem i in myItems)
            {
                //off-topic code hidden

                BlogItem b = new BlogItem();
                b.Id = Id;
                b.Body = Body;
                b.Author = Author;
                b.Title = Title;
                b.Published = Published;
                BlogItems.Add(b);
            }
            BlogItems = BlogItems.OrderByDescending(x => x.Id).ToList();
            BlogDisplay.DataSource = BlogItems;
            BlogDisplay.DataBind();

Итак, в свете всего этого, почему я получаю указанное выше исключение, когда использую DataBinder.Eval(Container.DataItem, "Title") в ретрансляторе?

1 Ответ

9 голосов
/ 17 февраля 2012

Измените BlogItem на это:

public class BlogItem
{
    public int Id { get; set; }
    public string Body { get; set; }
    public string Title { get; set; }
    public string Author { get; set; }
    public DateTime Published { get; set; }
}

Вы используете поля; он ожидает свойства.

...