Доступ к связанному элементу повторителя из шаблона в asp.net - PullRequest
0 голосов
/ 17 октября 2011

Я установил список элементов в качестве источника данных для повторителя и создал собственный шаблон.Есть ли способ прямого доступа к текущему связанному элементу в шаблоне?Пример кода ниже

class MyObject
{
public string Somevalue{get;set;}
}

Код в моей Page_Load

List<MyObject> selections = new List<MyObject>();
                    selections.Add(new MyObject());
                    Repeater1.ItemTemplate = new MyObjectTemplate();
                    Repeater1.DataSource = selections;
                    Repeater1.DataBind();

Шаблон

public class MyObjectTemplate : ITemplate
{
    public void InstantiateIn(Control container)
    {
      //Get the current item
       MyObject o = ????? as MyObject;

       string txt = "<h1>"+ o.Somevalue + "</h1>";
        LiteralControl h1 = new
            LiteralControl(txt);
        container.Controls.Add(h1);

    }
}

Я знаю, что если я просто хочу отобразить значение "Somevalue«В повторителе были бы более простые способы достижения этого, но реальная логика того, какие значения отображать и как сложнее.

1 Ответ

0 голосов
/ 17 октября 2011

Вам необходимо использовать DataItem из контейнера. Например,

public void InstantiateIn(Control container)
{
   //Get the current item
   MyObject o = ((IDataItemContainer)container).DataItem as MyObject;

   ... 
}

Единственная проблема, связанная с этим подходом, состоит в том, что если вы полагаетесь на состояние просмотра после обратной передачи для поддержания состояния управления, то элемент данных не будет иметь тип MyObject. В таком случае лучше всего использовать DataBinder - например,

public void InstantiateIn(Control container)
{
   // Get SomeValue property value
   var val1 = DataBinder.Eval(container, "SomeValue");

   // Get value2 property value
   var val1 = DataBinder.Eval(container, "Value2");

   ... 
}
...