Привязка общего списка типа struct к повторителю

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

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

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 и Price. Я начинаю с создания пустого общего списка типа «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'.**

I ' я даже не уверен, может ли это работать? Есть идеи?

Спасибо

7
задан Dal 19 August 2010 в 19:51
поделиться

2 ответа

Вам нужно изменить ваше публичное поле на публичное свойство.

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

To:

public string FruitName { get; set; }

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

private string fruitName;

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

Вот ссылка с человеком, который столкнулся с той же проблемой, что и вы.

9
ответ дан 7 December 2019 в 01:14
поделиться

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

1
ответ дан 7 December 2019 в 01:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: