使用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();//这里有个问题,每次重新绑定了之后不会立即显示数据,所以就做了一下简单的处理,让页面刷新一下,数据就出来了。
});
protected void Page_Load(object sender,EventArgs e)
{
varvar 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,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{
//Response.End();
//Response.Flush()
}
break;
}
}
原文链接:https://www.f2er.com/ajax/165294.html