代码之家  ›  专栏  ›  技术社区  ›  Kye

如何从ASP.NET转发器中获取绑定项

  •  3
  • Kye  · 技术社区  · 15 年前

    我必须设置一个LinkButton的onclientClick属性,但是在LinkButton绑定到之前,我不知道这个值是什么。我正在尝试设置中继器绑定时的值,但我无法训练如何获取“bounditem/datacontext”值…

    <asp:Repeater ID="Repeater1" runat="server">
        <ItemTemplate>
            <asp:LinkButton  Text="HelloWorld" ID="Hyper1" runat="server" OnDataBinding="Repeater1_DataBinding" >
            </asp:LinkButton> 
        </ItemTemplate> 
    </asp:Repeater>
    
    protected void Page_Load(object sender, EventArgs e)
    {
        var list = new List<TestObject>();
        list.Add(new TestObject() {TestValue = "testing1"});
        list.Add(new TestObject() { TestValue = "testing2" });
        list.Add(new TestObject() { TestValue = "testing3" });
    
        this.Repeater1.DataSource = list;
        this.Repeater1.DataBind();
    }
    
    public void Repeater1_DataBinding(object sender, EventArgs e)
    {
        var link = sender as HyperLink;
        //link.DataItem ???
    }
    

    是否仍要查找当前行绑定项是什么?

    3 回复  |  直到 11 年前
        1
  •  5
  •   Sergej Andrejev    15 年前

    也许您需要使用itemdatabound事件。它提供了repeateritemEventArgs参数,该参数具有可用的数据项

    this.Repeater1.ItemDataBound += Repeater1_ItemDataBound;
    
    void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        var dataItem = e.Item.DataItem;
    }
    
        2
  •  3
  •   Kelsey    15 年前

    我假设您正在尝试获取当前正被数据绑定的行的值?

    您可以将功能更改为:

    public void Repeater1_DataBinding(object sender, EventArgs e) 
    { 
        var link = sender as HyperLink;
        string valueYouWant = Eval("TestValue").ToString();
    
        // You could then assign the HyperLink control to whatever you need
        link.Target = string.Format("yourpage.aspx?id={0}", valueYouWant);
    } 
    

    valueYouWant 现在有了字段的值 TestValue 对于正在进行数据绑定的当前行。使用 DataBinding ItemDataBound 因为您不必搜索控件并将代码专门本地化为控件而不是整个模板。

        3
  •  1
  •   Chris    15 年前

    msdn库将此作为示例事件处理程序:

    public void BindData(object sender, EventArgs e)
    {
        Literal l = (Literal) sender;
        DataGridItem container = (DataGridItem) l.NamingContainer;
        l.Text = ((DataRowView) container.DataItem)[column].ToString();
    
    }
    

    (见 http://msdn.microsoft.com/en-us/library/system.web.ui.control.databinding.aspx )

    如您所见,它只是一个简单的演示,演示了如何访问数据项并从中获取数据。根据您的场景调整这一点是留给读者的练习。:)