使用Ajax后,原來導出功能失敗的解決方法_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:ASP.NET蔚昜璃唗蹈趙傖Binary揣湔祫DB or File
      郔輪衄?婓枒蹦涴跺恀枙..苤萊竭屾俙涴跺陲昹..憩善厙繚奻梑賸珨虳訧埭..諒湮模?睡蔚昜璃唗蹈趙傖Binary Data..?綴揣湔善訧蹋踱麼紫黓孬.. 絞?褫眕唗蹈趙..憩珨隅褫眕毀唗蹈趙賸...?妗唗蹈趙跡宒

      問題描述:我們的產品在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;


      }

      其他:暫時沒有找到其他的方法,如果您有更好的方法,請多多指教!

      分享:在ASP.NET Atlas中調用Web Service
      Atlas Framework中包含了對AJAX調用的封裝,讓您可以很方便的在客戶端通過JavaScript調用服務器端方法。在本篇文章中,我將解釋一下如何使用Atlas調用服務器端Web Service。 使用Atlas,我們

      來源:模板無憂//所屬分類:.Net教程/更新時間:2008-08-22
      相關.Net教程