//建XMLHttpRequest对象,适应于firefox,ie
if(typeof XMLHttpRequest=="undefined" && window.ActiveXObject)
{
function XMLHttpRequest()
{
var arrSign=["MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
for (var i=0;i<arrSign.length;i++)
{
try
{
var oRequest=new ActiveXObject(arrSign[i]);
return oRequest;
}
catch(oError)
{}
}
throw new Error("MSXML is not installed");
}
}
//Complete是请求时执行的函数,fail是失败时执行
function request(url,Param,Complete,fail,Method,isAsnc)
{
var oRequest=new XMLHttpRequest();
if(!Method) Method="post";
if(!isAsnc) isAsnc=false;
oRequest.open(Method,url,isAsnc);
oRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
oRequest.onreadystatechange=function()
{
if(oRequest.readyState==4)
{
//alert(oRequest.ResponseText);
if(oRequest.status==200)
{
if(typeof(Complete)=="function") 
{
Complete(oRequest);
}
}
else
if(typeof(fail)=="function") fail(oRequest);
}
}//
oRequest.send(Param);
}
<script type="text/javascript" language=javascript src="js/include.js"></script>
<script type="text/javascript" language=javascript>
if(typeof($)!="function")
{
function $(id)
{
return document.getElementById(id);
}
}
//fpDetail 是页面中一个div的id,页面中某个地方将调用cc()这个方法
function cc(para)
{
var pars="callback=1¶="+para;
request($("<%=form1.ClientID%>").action,pars,showResponse,showAlert,null,true);
return false;
}
function showResponse(originalRequest)
{
$("fpDetail").innerHTML=originalRequest.responseText;
}
function showAlert(request)
{
alert("Some Error appear!\r\n"+request.statusText);
}
</script>
protected void Page_Load(object sender, EventArgs e)
{
string callBack;
callBack = Request.Form["callback"];
if (callBack != null && callBack == "1")
{
return;
}
Button1.Attributes.Add("onclick", "return cc();");
.
.
.
.
.//其它操作
}
protected override void OnPreRender(EventArgs e)
{
//gv1是一个GridView对象
string callBack;
callBack=Request.Form["callback"];
if (callBack != null && callBack == "1")
{
Response.Clear();
//GYF.ExecuteQuery返回一个Datatable
gv1.DataSource = GYF.ExecuteQuery("sql语句");
gv1.DataBind();
StringBuilder sb = new StringBuilder();
gv1.RenderControl(new HtmlTextWriter(new StringWriter(sb)));
Response.Write(sb.ToString());
Response.End();
}
else
base.OnPreRender(e);
} 最后,需要注意的是,.net在ajax请求时会验证服务器端控件,如Gridview导出excel时,ajax这种请求可能使得一些服务器控件没有在前端呈现,以致于通不过页面验证,这里可以做如下修正:
1.前端页面中<%page%>中加入 EnableEventValidation=False;
2.重写页面的方法VerifyRenderingInServerForm方法
public override void VerifyRenderingInServerForm(Control control)
{
//什么都不做.
}
发表于 @ 2008年12月05日 09:55:00 | 评论( loading... ) | 举报| 收藏