3

ポストバックを行うページにリンクがあります。

    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. Cookie を使用しない

このようなajaxを使用してデータを送信しようとしていました

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

しかし、http ハンドラーは別の応答オブジェクトを書き込みます。または、別のコンテキストがハンドラーに来ます。

4

1 に答える 1

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 でフォームを動的に作成し、必要に応じてフィールドを設定できます。

于 2012-06-29T14:32:52.207 に答える