2010-08-19 5 views
7

У меня была небольшая проблема с попыткой привязать общий список к ретранслятору. Тип, используемый в общем списке, фактически является структурой.Связывание общего списка типа 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(); 

} 

У меня есть простая-структура для моделирования фруктов, у нас есть два свойства, которые 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'.** 

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

Thanks

+1

Случайное замечание, класс ListView массово заменяет ретранслятор с точки зрения возможностей. –

+0

@ Chris Marisic спасибо за отзыв, я читаю о ListView сейчас, выглядит очень хорошо: http://weblogs.asp.net/scottgu/archive/2007/08/10/the-asp-listview-control- part-1-building-a-product-listing-page-with-clean-css-ui.aspx – Dal

ответ

9

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

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

To:

public string FruitName { get; set; } 

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

private string fruitName; 

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

Here is a link with someone who has had the same issue as you.

+0

Это сработало! Боже, я сейчас чувствую себя глупым духом, имеет большой смысл, большое спасибо! :) – Dal

1

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

Смежные вопросы