我必须设置一个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 ???
}
无论如何都要找出当前行绑定项目是什么?
答案 0 :(得分:5)
也许你需要使用ItemDataBound事件。它提供了具有DataItem可用的RepeaterItemEventArgs参数
this.Repeater1.ItemDataBound += Repeater1_ItemDataBound;
void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
var dataItem = e.Item.DataItem;
}
答案 1 :(得分:3)
我假设您正在尝试获取当前正在数据绑定的行的值?
您可以将功能更改为:
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
事件是执行此操作的最佳方式,因为您不必搜索控件并专门将代码本地化到控件而不是整个模板。
答案 2 :(得分:1)
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)
正如您所看到的,它是一个简单的演示,说明如何访问数据项并从中获取数据。将此调整到您的场景是一个留给读者的练习。 :)