【ASP.NET】利用UpdatePanel控件实现局部刷新

本文解决ASP.NET AJAX中使用UpdatePanel时,后台方法调用ClientScript.RegisterStartupScript()无效的问题。介绍如何正确使用ScriptManager.RegisterClientScriptBlock()进行脚本块注册,避免常见错误,确保UpdatePanel内容正确刷新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 本章主要解决为什么使用UpdatePanel后,后台方法调ClientScript.RegisterStartupScript()无效问题展开。

把这个方法改为ScriptManager.RegisterClientScriptBlock(UpdatePanel的ID,this.GetType(),key ,"Js方法名()", true);

注意:第四个参数, 我原本是这样写的"<script>js方法名()</script>" 这样写是会失效的!!超重要的一点!!

注意:key不能重复 且不能为空值,不然也是会失效!!!

如果在  protected void Page_Load(object sender, EventArgs e) 方法里面也有用到这个东西,同样也是更新UpdatePanel的信息,那么这个时候不要用这个ScriptManager.RegisterClientScriptBlock,要用

 ClientScript.RegisterStartupScript(Page.GetType(), key , "<script>js方法()</script>"); //注意要加<script></script>!!!

不要问我 为什么,因为厂长是我 表哥(开个玩笑~) ,反正就是这样我也不懂,就能够正常地调用了。。

还有还有,在Page_Load里面,因为你是注册脚本,所以每次刷新页面的时候都必须执行到这个注册,不然的话,刷新页面之后UpdatePanel的内容全没了!所以,注册脚本那部分代码在Page_Load里面必须执行,故不能加类似:if(!IsPostBack){}这样的限制

好了说了那么多还是看代码舒服下面代码部分 直接贴了

   <div style="display: inline-block;">
                        <div class="input-group" style="width: 400px;">
                            <input id="searchcontent" type="text" class="form-control" placeholder="Search for..." runat="server" />
                            <span class="input-group-btn">
                                <asp:ImageButton ImageUrl="~/img/SearchIcon.png" CssClass="img_size btn btn-default" ID="SearchBtnQ" runat="server" OnClick="SearchBtn_Click" />
                            </span>
                        </div>
                    </div>
                    <div style="display: inline-block;">
                        <input id="add_resourceBtn" style="margin-top: -26px;" type="button" class="btn btn-default" value="添加资源" />
                    </div>
                </div>                
                <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
                <asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true">
                    <ContentTemplate>                        
                        <div class="resources_div" id="resources_div">
                            <%--<span class="file_title glyphicon glyphicon-link"><a href="#">世界顶尖比赛机器人资料大全.pdf</a></span>--%>
                        </div>
                        <div style="display: none">
                            <asp:Button ID="HiddenBtn1" OnClick="HiddenBtn_Click" runat="server" />
                        </div>
                    </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="SearchBtnQ"/>
                    </Triggers>
                </asp:UpdatePanel>

其中<Triggers>的作用是让 在<UpdatePanel>之外的按钮执行后台方法之后 仅更新这个UpdatePanel的意思。

例如上面我按那个ID为SearchBtnQ的图片按钮就会调用后台方法,然后仅刷新UpdatePanel的内容。(已成功!)

 而放在UpdatePanel里面的HiddenBtn1 按钮 也是仅会刷新UpdatePanel内容。调用的后台方法如下:

//查询通过类型               
        public void Query(string type = null)
        {
            if (type == null)
            {
                type = this.FileType.Value;
            }
            int team_id = int.Parse(Request["id"]);
            using (IntelligentRobotEntities entities = new IntelligentRobotEntities())
            {
                IOrderedQueryable<TeamResources> res;
                if (type == "all")
                {
                    res = from r in entities.TeamResources
                          where r.team_id == team_id
                          orderby r.upload_time descending
                          select r;
                }
                else
                {
                    res = from r in entities.TeamResources
                          where r.team_id == team_id && r.filesuffix == type
                          orderby r.upload_time descending
                          select r;
                }
                foreach (var v in res)
                {
                    //this.label1.Text += v.filename + " | ";                    
                    ScriptManager.RegisterClientScriptBlock(this.UpdatePanel1, this.GetType(), "AddTeamResourceItem" + v.id,
                        "AddResourceItem('" + v.id + "','" + v.filename + "','" + v.uploader + "','" + v.upload_time.ToString("yyyy-MM-dd") + "','" + v.downloadtimes + "')", true);
                    //ScriptManager.RegisterStartupScript()
                    //ClientScript.RegisterStartupScript(Page.GetType(), "AddTeamResourceItem" + v.id,
                    //    "<script>AddResourceItem('" + v.id + "','" + v.filename + "','" + v.uploader + "','" + v.upload_time.ToString("yyyy-MM-dd") + "','" + v.downloadtimes + "')</script>");
                }
            }
        }

        /// <summary>
        /// 隐藏按钮点击事件
        /// </summary>        
        protected void HiddenBtn_Click(object sender, EventArgs e)
        {
            Query();
        }

看到这里基本都 懂了吧。。。。网上的很多人都问 这个东西我就总结了下 方便以后查看吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值