2016-03-02 65 views
1

我正在asp.net網站上工作,我有Imagebutton在點擊事件時調用c#函數。我想阻止這個圖像按鈕創建一個postBack。防止圖像按鈕做PostBack

我曾嘗試加入

OnClientClick="return false;"UseSubmitBehavior="false"

但它並沒有爲我工作。

您有解決方案嗎?

席力圖召通過客戶端爲下列功能的服務器功能,但似乎有什麼不對我的代碼:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/json2/20130526/json2.min.js"></script> 


<script type="text/javascript"> 
      $('#excelImageButton').click(function funcall() { 

     $.ajax(
      { 

       type: "POST", 
       url: "BerthOccupancyForm.aspx/GridToExcel", 
       data: "{}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 

      }); 

     return false; 
    }); 

</script> 

enter image description here

這是後面的代碼:

[WebMethod()] 
public static void GridToExcel(GridView berthGridView, GridView recap) 
{ 
    if (berthGridView.Rows.Count > 0) 
    { 
     HttpContext.Current.Response.Clear(); 
     HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=BerthOccupancy.xls"); 
     HttpContext.Current.Response.ContentType = "text/csv"; 
     StringWriter sw = new StringWriter(); 
     HtmlTextWriter htw = new HtmlTextWriter(sw); 
     berthGridView.RenderControl(htw); 

     if (RT == "Year To Date") 
     { 
      foreach (GridView gv in Code) 
      { 
       gv.RenderControl(htw); 
      } 
     } 
     else 
     { 
      recap.RenderControl(htw); 

     } 

     HttpContext.Current.Response.Write(sw.ToString()); 
     HttpContext.Current.Response.End(); 
    } 
} 

謝謝

+0

你在'page_load'上寫了那個按鈕在服務器端嗎?同時顯示** ImageButton的完整aspx ** – BNN

+1

如果是webforms,則必須在服務器側控件上處理回發。其他方式你不能調用OnClick函數。 但你仍然總是可以切換到AJAX或只是將ImageButton替換爲簡單圖像並調用調用Web方法的JS代碼(這基本上是另一種執行類AJAX操作的方法) – Lorin

+0

@coder我確實寫了它頁面加載,但它不適合我。 –

回答

0

謝謝大家的建議。我能夠這樣解決它。

我添加了一個具有靜態List和靜態字符串的靜態類。我在WebForm中調用這個類。這種方式保留GridViews在回發期間的數據

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Data; 
using System.Web.UI.WebControls; 
/// <summary> 
/// Summary description for Global 
/// </summary> 
public static class Global 
{ 

    public static List<GridView> GridViewList = new List<GridView>(); 
    public static string ReportType = ""; 
} 

以下C#函數使用靜態類中的數據導出到excel。

public void GridToExcel() 
{ 
    if (berthOccupancyDataGridView.Rows.Count > 0) 
    { 
     Response.Clear(); 
     //HttpContext.Current.Response.Buffer = true; 
     Response.AddHeader("content-disposition", "attachment; filename=BerthOccupancy.xls"); 
     //HttpContext.Current.Response.Charset = ""; 
     Response.ContentType = "text/csv"; 

     StringWriter sw = new StringWriter(); 
     HtmlTextWriter htw = new HtmlTextWriter(sw); 
     berthOccupancyDataGridView.RenderControl(htw); 

     if (Global.ReportType == "Year To Date") 
     { 
      foreach (GridView gv in Global.GridViewList) 
      { 
       gv.RenderControl(htw); 
      } 
     } 
     else if(Global.ReportType == "Monthly") 
     { 
      recapGridView.RenderControl(htw); 

     } 

     Response.Write(sw.ToString()); 
     Response.End(); 
    } 
} 
0

第一個al你不能通過gridviewwebmethod

如果你真的想導出網格爲excel使用客戶端庫從表標記生成excel或做部分回發並生成excel並寫入響應。

看到這個plunker導出到Excel中的Excel。