2012-06-29 53 views
3

我在頁面上有一個鏈接,該鏈接發佈回來。如何將數據發送給httphandler

otherOptionsContainer.Controls.Add(new LiteralControl(String.Format("<a href='{0}' onclick='return {1}.exportItems();'>Export</a><br/>", exportURL, this._clientInstanceName))); 

和HTTP處理程序

   byte[] ms_excel = some_params_from_code 
       MemoryStream ms_excel_tream = new MemoryStream(ms_excel); 
       context.Response.ContentType = CONTENT_TYPE_MS_EXCEL; 
       String dateNow=DateTime.Now.ToString("dd-MMM-yyyy_HH_mm", new System.Globalization.CultureInfo("en-US")); 
       context.Response.AddHeader("Content-Disposition", string.Format("attachment; filename=Export_{0}.xls", dateNow)); 
       ms_excel_tream.WriteTo(context.Response.OutputStream); 
       ms_excel_tream.Close(); 

我需要發送some_params_from_code到的HttpHandler。我有一些限制。 1.不要使用查詢字符串 2.不使用cookies

我試圖發送使用AJAX數據這樣

$.ajax({ 
    url: "_Layouts/blah/blahHandler.ashx", 
    contentType: "application/json; charset=utf-8", 
     data: { 'key1':'value1'}, 
     dataType: "json", 
     success: OnComplete, 
     error: OnFail 
    }); 

但HTTP處理程序寫入另一響應對象。或者另一個環境來處理。

+0

'ssome_params_from_code'應該來自哪裏?服務器端?客戶端傳入你的json對象?它不是很清楚 – YavgenyP

+0

ssome_params_from_code應該來自服務器端。在我使用json的例子中,我將它從服務器端傳遞到客戶端,並使用json從客戶端發送。 – Alexandr

+1

所以它就像你在服務器端使用的每個其他對象一樣(查詢字符串/ cookies在這裏是irellevant)。如果你從db獲得的東西,你可以用db調用來獲得它,如果它是一個會話相關對象,你可以從會話等中檢索它。你需要提供更多關於這個變量的信息,以及什麼不起作用。 – YavgenyP

回答

3

由於您唯一的限制是不使用查詢字符串和Cookie,爲什麼不使用表單發佈?考慮這個虛擬的例子。

在HTML:

<form id="form" action="DefaultHandler.ashx" method="post" style="display: none;"> 
    <input type="hidden" name="field1" value="abc" /> 
    <input type="hidden" name="field2" value="xyz" /> 
</form> 
<a href="#" onclick="form.submit(); return false;">Handle</a> 

在處理程序:

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.ContentType = "text/plain"; 
    context.Response.Write("Received:\n"); 
    context.Response.Write(context.Request.Form["field1"]); 
    context.Response.Write("\n"); 
    context.Response.Write(context.Request.Form["field2"]); 
    context.Response.Write("\n"); 
} 

調整它爲您的需求。您可以在JavaScript中動態創建表單並根據需要設置字段。