問題描述:我們的產品在Ajax后(使用微軟的UpdatePanel),其中的導出功能出現錯誤。因為導出功能使用了Response直接輸出內容,而Ajax的異步方式對此不能解析導致出現錯誤。
解決過程:在網上找了一下,可以使用這個 http://forums.microsoft.com/china/ShowPost.aspx?PostID=2732578&SiteID=15 的方法來解決。但是,如果你的按鈕時動態創建的,或者在模板中,這個帖子的方法也不能解決問題。 這個里面的內容雖然沒有能解決我的問題,但是給了我一個思路,既然不能使用Ajax的方式來請求,那么就使用PostBack的方式。
解決方法:
以下為引用的內容:
1、原來的導出按鈕增加 OnClientClick事件。
btnExport.OnClientClick = "return AutoForm_Export('PostBackEventTarget_IsExport');";
2、客戶端增加javascript函數AutoForm_Export。
function AutoForm_Export(postBackEventTarget)
{
WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(postBackEventTarget, "", true, "", "", false, true)) ;
return false;
}
3、在服務器端根據Request["__EVENTTARGET"] 來判斷是否是導出事件。注意下面紅色字體的注釋
if (Page.Request["__EVENTTARGET"] != null)
{
bool isInAsyncPostBack = false;
ScriptManager sm = ScriptManager.GetCurrent(Page);
if (sm != null)
{
isInAsyncPostBack = sm.IsInAsyncPostBack;
}
if (isInAsyncPostBack )
{
/*
一定要進行判斷是否是使用Axaj進行異步請求,否則在點擊導出按鈕以后,再進行其它Ajax請求, Page.Request["__EVENTTARGET"] 會保留原來的值,這樣就錯誤判斷了。
*/
_isExport = false
}
else
{
string postBackEventTarget = Page.Request["__EVENTTARGET"].ToString();
if (postBackEventTarget == "PostBackEventTarget_IsExport")
{
_isExport = true;
}
else
_isExport = false;
}
}
else
_isExport = false;
}
新聞熱點
疑難解答
圖片精選