ajax刷新ASP.NET Repeater控件的数据

来源:互联网 发布:澳门 一等功 知乎 编辑:程序博客网 时间:2024/05/17 02:07

使用repeater控件时,遇到这样一个问题,想使用ajax来请求页面来的后台,使repeater的数据源重新绑定,却发现怎么绑定都不行。

研究了半天,研究出以下两种方法:

第一种,利用js使页面回发主动回发一次,回发的时候将参数加在url后面带回后台,在后台接受到参数,查询数据,重新绑定给repeater。

js代码:

这里先找到你需要触发回发的那个控件,我这里是一个class为button的input控件

$(".button").click(function(){

//这里的href是自己,在后面加上参数,这样就能在后台获取到参数信息

   window.location.href = "/ActivitiWorkFlow/WFVersion.aspx?&f=QueryWFDefinitionList&wfname=" + encodeURI(title) + "&start=0&limit=5";
     window.parent.location.reload();//这里有个问题,每次重新绑定了之后不会立即显示数据,所以就做了一下简单的处理,让页面刷新一下,数据就出来了。

});

后台C#代码;

 protected void Page_Load(object sender, EventArgs e)

{

var  var fun = Request["f"];//这里来获取参数

if(string.IsNullOrEmpty(fun))//这里判断是否接受到了参数,如果不判断就使用,可能会抛出异常

{

return;

}

  switch (fun)
            {
                case "QueryWFDefinitionList":
                    var wfname = HttpUtility.UrlDecode(Request["wfname"]);
                    var start = int.Parse(Request["start"]);
                    var limit = int.Parse(Request["limit"]);
                    try
                    {
                        var data = handler.QueryWFDefinitionList(wfname, start, limit, HttpContext.Current);


                        rpLogicVersion.DataSource = data.Value<Newtonsoft.Json.Linq.JArray>("data");//重新绑定数据源
                        rpLogicVersion.DataBind();//
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex.Message + ex);
                        throw;
                    }
                    break;
            }

}

这样就可以利用js来控制repeater的数据源。

第二种:将新的数据源生成的html代码发送到前台,手动从js里将html代码加入repeater的tbody中

js代码:

        //下面是利用ajax将返回的内容以dom的形式插进当前页面
                //                $.ajax({
                //                    type: "POST",
                //                    url: "/ActivitiWorkFlow/WFVersion.aspx",
                //                    data: "f=QueryWFDefinitionList&wfname=" + encodeURI(title) + "&start=0&limit=5",
                //                    success: function(msg) {
                //                        $("#rp_allVersion tbody").html(msg);//找到repeater的tbody
                //                    }
                //                });

这里发送一个ajax到后台,请求数据,返回的msg是html代码。直接 找到repeater的tbody加入msg就可以了。

C#代码:

 protected void Page_Load(object sender, EventArgs e)

{

var  var fun = Request["f"];//这里来获取参数

if(string.IsNullOrEmpty(fun))//这里判断是否接受到了参数,如果不判断就使用,可能会抛出异常

{

return;

}

  switch (fun)
            {
                case "QueryWFDefinitionList":
                    var wfname = HttpUtility.UrlDecode(Request["wfname"]);
                    var start = int.Parse(Request["start"]);
                    var limit = int.Parse(Request["limit"]);
                    try
                    {
                        var data = handler.QueryWFDefinitionList(wfname, start, limit, HttpContext.Current);


                        rpLogicVersion.DataSource = data.Value<Newtonsoft.Json.Linq.JArray>("data");//重新绑定数据源
                        rpLogicVersion.DataBind();//

                        //利用ajax来刷新repeater的数据时,可以使用下面的代码
                        //var sb = new StringBuilder();
                        //var sw = new StringWriter(sb);
                        //HtmlTextWriter htw=new HtmlTextWriter(sw);
                        //rpLogicVersion.RenderControl(htw);
                        //Response.Write(sb.ToString());
                 
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex.Message + ex);
                        throw;
                    }finaly{

//这段代码必须写在finaly中,否则会报线程错误

       //Response.End();
                        //Response.Flush()

}
                    break;
            }

}


0 0
原创粉丝点击