首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.Net中继器项目命令未触发

ASP.Net中继器项目命令未触发
EN

Stack Overflow用户
提问于 2009-08-24 12:01:52
回答 10查看 35K关注 0票数 20

好吧,我已经使用中继器几百次了,没有任何问题,但今天有些地方出了问题。我有一个中继器,并且我订阅了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。一旦它被注释掉,并且中继器在每次回发时都得到数据绑定,它就可以正常工作。我在很多其他页面上都这样做过,但在这个页面上,它似乎不起作用。

有没有其他人遇到过这种行为,或者有解决方案?

EN

回答 10

Stack Overflow用户

发布于 2009-08-24 12:56:03

最有可能的情况是,您禁用了该页面的ViewState。

原因是,当您执行回发时,中继器中的所有控件通常都是从viewstate中的数据重新生成的。然后,根据控件的ID标识应该接收事件的对象,并路由该事件。

如果禁用viewstate,则在回发期间不会重新生成控件树,因此内存中不存在应接收事件的控件。所以这个事件就结束了。

如果你真的想禁用视图状态,但仍然想接收事件,我有一个变通方法(它一点都不脏)。我一直在考虑写一篇关于它的博客文章,所以如果你愿意,我可以从日常琐事中抽出一点时间来描述它。

编辑:这里描述了解决方法:http://petesdotnet.blogspot.dk/2009/08/asp.html

票数 24
EN

Stack Overflow用户

发布于 2011-11-23 02:15:08

删除if (!IsPostBack),因为这会阻止中继器重新绑定,并且项目命令事件在回发后找不到该行。

票数 6
EN

Stack Overflow用户

发布于 2015-11-13 11:05:55

我有同样的问题,除了使用更新面板,我在我的模式中有一个必需的字段验证器。我发现中继器中的LinkButtons触发了requiredFieldValidor事件,然后我在中继器的LinkButtons中添加了CausesValidation="false“。按照预期工作。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1321944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档