首页新闻找找看学习计划

update panel 内部的控件,在没有ID情况下,如何同步回发?

0
悬赏园豆:20 [已解决问题] 解决于 2013-07-11 19:15

gridview外加了个update panel ,导致自定义模板里的编辑按钮无法同步回发,于是乎写了一个事件,但事件只能保证按钮在第一次单击时是同步回发,第二次就不行了。求解决方案?

protected void gvList_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                。。。
                var lnkAddSub = e.Row.FindControl("lnkAddSub") as LinkButton ;
                if (lnkAddSub != null)
                {
                    ScriptManager1.RegisterPostBackControl(lnkAddSub);
                }
                。。。
            }
        }

protected void gvList_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "AddSub")
            {
                return;
            }
         }
沧海一杰的主页 沧海一杰 | 初学一级 | 园豆:28
提问于:2013-07-11 17:09
< >
分享
最佳答案
0

黄天不负苦心人啊,我解决了,倒也不是完全依赖网络。这篇帖子给了我一些提示:

http://www.codeproject.com/Messages/2483369/Doing-a-sync-normal-postback-from-and-gridview-ins.aspx

贴子中有一个标题:Doing a sync(normal) postback from and gridview inside an ajax updatepanel

里面谈到在gridview内部再嵌入一个update panel ,嵌入的位置是使要同步回发的控件的ID可以被访问的模板内,然后做类似的设置:

<asp:UpdatePanel ID="UpdatePanel2" runat="server">
                                                                            <Triggers>
                                                                                <asp:PostBackTrigger ControlID="lnkAddSub" />
                                                                                <asp:PostBackTrigger ControlID="lnkEdit" />
                                                                            </Triggers>
                                                                            <ContentTemplate>
                                                                            </ContentTemplate>
                                                                        </asp:UpdatePanel>

就可以完成同步回发了。注意不要往ContentTemplate里写绑定数据哦,只要把控件ID设置成同步回发就可以了,否则像 CommandArgument='<%#Container.DataItemIndex %>'这样绑定就错了,因为放进去Container就变了嘛,我刚才还纠结了一小会儿呢。

沧海一杰 | 初学一级 |园豆:28 | 2013-07-11 18:19

呵呵,谢谢你给的园豆,也没帮上你忙,有问题大家互相研究哈

阿磊ing | 园豆:2 (初学一级) | 2013-07-12 08:15
其他回答(3)
0

没有Id是做不到的,除非你有ID之外的其他唯一标识

九州居士 | 园豆:202 (菜鸟二级) | 2013-07-11 17:18

兄弟,别那么绝对,最起码,我可以在page_load事件里对gridview按行find控件每次执行

 ScriptManager1.RegisterPostBackControl(lnkAddSub);

只是觉得这种方法使程序的结构看起来不太合理,太外行了。我只是想知道有没有正规的微软推荐的做法。

支持(0) 反对(0) 沧海一杰 | 园豆:28 (初学一级) | 2013-07-11 17:28
0

不知道你想做什么,既然加了updatePanel不就是想局部刷新吗?但你写的看不懂

收获园豆:15
阿磊ing | 园豆:2 (初学一级) | 2013-07-11 17:24

里面大多数的命令按钮我是希望异步的,但有一个编辑按钮,这需要跳转到编辑视图,编辑视图是在别外一个detailview里的,detailsview不在updatepanel里,所以单击后跳转不了。

支持(0) 反对(0) 沧海一杰 | 园豆:28 (初学一级) | 2013-07-11 17:31

看来有人遇到了和我一样的问题,但答案对我好像没用

http://stackoverflow.com/questions/2545508/how-do-i-force-full-post-back-from-a-button-within-an-updatepanel

支持(0) 反对(0) 沧海一杰 | 园豆:28 (初学一级) | 2013-07-11 17:35
0

第一次执行完之后,重新绑定一次数据试试

收获园豆:5
二十三号同学 | 园豆:941 (小虾三级) | 2013-07-11 17:43

此法暂不可行,页面逻辑比较复杂,有三级三层gridview嵌套

支持(0) 反对(0) 沧海一杰 | 园豆:28 (初学一级) | 2013-07-11 17:49

@沧海一杰: 那你获取到控件的ClientID,后台进行注册。把事件再绑定回来。

用JS去绑定也行。

支持(0) 反对(0) 二十三号同学 | 园豆:941 (小虾三级) | 2013-07-11 18:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册