問題描述:
我們的產品在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;
}
其他:
暫時沒有找到其他的方法,如果您有更好的方法,請多多指教!