从asp.net中的模板访问绑定的转发器项

时间:2011-10-17 08:07:12

标签: asp.net templates repeater

我已将项目列表设置为转发器的数据源,并且我已创建自定义模板。有没有办法直接访问模板中的当前绑定项? 下面的示例代码

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 :(得分:0)

您需要使用容器中的DataItem。例如,

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

   ... 
}

这种方法的唯一问题是,如果您依靠post-back上的视图状态来维护控件状态,那么数据项将不是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");

   ... 
}