Cia*_*ill 20 asp.net repeater itemcommand
好吧,我已经使用了几十次中继器而没有任何问题,但今天出现了一些问题.我有一个转发器,我正在订阅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>
Run Code Online (Sandbox Code Playgroud)
和我的代码隐藏是这样的:
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
}
Run Code Online (Sandbox Code Playgroud)
除非我注释掉if(!IsPostBack)行,否则不会调用MyRepeater_ItemCommand.一旦被注释掉并且转发器在每个回发上获得数据绑定,它就可以正常工作.我已经在很多其他页面中完成了这个,但就此而言似乎没有用.
其他人遇到这种行为或有解决方案吗?
Pet*_*ete 24
最有可能的是,您已禁用该页面的ViewState.
原因是当您执行回发时,转发器中的所有控件都通常从视图状态中的数据重建.然后,根据控件的ID识别应该接收事件的对象,并路由事件.
如果禁用视图状态,则在回发期间不会重建控制树,因此内存中不存在应该接收事件的控件.事件就此消失了.
如果你真的想要禁用视图状态,但仍想接收事件,我有一个解决方法(并且它根本不是脏的).我一直在考虑写一篇关于它的博客文章,所以如果你愿意的话,我可以花点时间摆脱我的正常琐事,并描述一下.
编辑:此处描述了解决方法:http://petesdotnet.blogspot.dk/2009/08/asp.html
我有同样的问题,除了使用更新面板之外,我的模式中有一个必需的字段验证器。我发现转发器中的 LinkButtons 触发了 requiredFieldValidor 事件,然后我在转发器的 LinkButtons 中添加了 CausesValidation="false"。按预期工作。
| 归档时间: |
|
| 查看次数: |
32961 次 |
| 最近记录: |