Привязка универсального списка типа структуры к повторителю - PullRequest
7 голосов
/ 19 августа 2010

У меня возникла небольшая проблема при попытке связать общий список с ретранслятором.Тип, используемый в общем списке, на самом деле является структурой.

Я построил базовый пример ниже:

struct Fruit
{
    public string FruitName;
    public string Price;    // string for simplicity.
}


protected void Page_Load(object sender, EventArgs e)
{

    List<Fruit> FruitList = new List<Fruit>();

    // create an apple and orange Fruit struct and add to List<Fruit>.
    Fruit apple = new Fruit();
    apple.FruitName = "Apple";
    apple.Price = "3.99";
    FruitList.Add(apple);

    Fruit orange = new Fruit();
    orange.FruitName = "Orange";
    orange.Price = "5.99";
    FruitList.Add(orange);


    // now bind the List to the repeater:
    repFruit.DataSource = FruitList;
    repFruit.DataBind();

}

У меня есть простая структура для моделирования Fruit, у нас есть два свойства, которыеявляются FruitName и Цена.Я начинаю с создания пустого общего списка типа «FruitList».

Затем я создаю два фрукта, используя структуру (яблоко и апельсин).Эти фрукты затем добавляются в список.

Наконец, я связываю общий список со свойством DataSource ретранслятора ...

Разметка выглядит следующим образом:

<asp:repeater ID="repFruit" runat="server">
<ItemTemplate>
    Name: <%# Eval("FruitName") %><br />
    Price: <%# Eval("Price") %><br />
    <hr />
</ItemTemplate>

Я ожидаю увидеть на экране название фруктов и цену, разделенные горизонтальным правилом.

В настоящий момент я получаю ошибку, касающуюся фактического связывания ...

**Exception Details: System.Web.HttpException: DataBinding: '_Default+Fruit' does not contain a property with the name 'FruitName'.**

Я даже не уверен, что это может работать?Есть идеи?

Спасибо

Ответы [ 2 ]

9 голосов
/ 19 августа 2010

Вам необходимо изменить публичное поле в публичную собственность.

Изменить это: public string FruitName;

Кому:

public string FruitName { get; set; }

В противном случае вы можете сделать fruitName частным и включить в него публичную собственность.

private string fruitName;

public string FruitName { get { return fruitName; } set { fruitName = value; } }

Вот ссылка с кем-то, у кого была такая же проблема, как у вас.

1 голос
/ 19 августа 2010

Ошибка говорит вам все, что вам нужно знать.У вас есть открытые поля, а не свойства, определенные для FruitName и Price.

...