【问题标题】:Accessing bound repeater item from template in asp.net从 asp.net 中的模板访问绑定的中继器项目
【发布时间】:2011-10-17 19:51:08
【问题描述】:

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

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”的值,会有更简单的方法来实现这一点,但显示哪些值以及如何显示的实际逻辑更复杂。

【问题讨论】:

标签: asp.net templates repeater


【解决方案1】:

您需要使用容器中的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");

   ... 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 2015-11-01
    • 1970-01-01
    • 2017-07-15
    相关资源
    最近更新 更多