【发布时间】:2009-08-24 12:01:51
【问题描述】:
好的,我已经使用中继器数百次了,但今天出了点问题。我有一个转发器,并且我正在订阅 itemCommand 事件,但是当我的命令运行时,页面会回发,但不会触发该事件。
为了解决这个问题,我必须在每次回发时进行数据绑定。
我的中继器看起来像这样:
<asp:Repeater id="MyRepeater" runat="server" onitemcommand="MyRepeater_ItemCommand">
<ItemTemplate>
<li>
<asp:Label id="Label" runat="server" />
<asp:LinkButton id="LinkButton1" runat="server" commandname="Complete" commandargument='<%# Eval("MyID") %>' text='<%# Eval("Title") %>' />
</li>
</ItemTemplate>
</asp:Repeater>
我的代码隐藏是这样的:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SetupPage();
}
}
private void SetupPage()
{
// Do other stuff
MyRepeater.DataSource = Repository.GetStuff()
MyRepeater.DataBind();
}
protected void MyRepeater_ItemCommand(object sender, RepeaterCommandEventArgs e)
{
// Do all my stuff here
}
除非我注释掉 if (!IsPostBack) 行,否则不会调用 MyRepeater_ItemCommand。一旦将其注释掉并且转发器在每次回发时都获得数据绑定,它就可以正常工作。我在很多其他页面上都这样做过,但在这个页面上似乎不起作用。
还有其他人遇到这种行为或有解决方案吗?
【问题讨论】:
-
尽可能向我们展示您页面的完整代码(标记和后端)。
-
您是否为此页面打开了视图状态?
-
完整的标记不适合 cmets 框,但页面中没有任何异常。使用母版页(也没有提及在母版页中禁用 ViewState)和内容占位符,然后是转发器 - 非常简单。后面的代码有更多的数据库/存储库访问代码,但也没什么异常
标签: asp.net repeater itemcommand