12

MVC の下でいくつかのパラメーターを使用して jQuery AJAX 呼び出しを使用して、ファイルのダウンロード操作を提供したいと考えています。

(javascript)
function DoDownload(startDate) {

  $.ajax({ 
     url:"controller/GetFile/",
     data: {startDate:startDate}
     ...
  });

}

C# Controller Code

 public void GetFile(string startDate) {

  var results = doQueryWith(startDate);

   // Create file based on results
   ....
   // How do I tell the server to make this a file download??
 }

通常、ファイルを次のようなリンクにダウンロードさせます。

<a h r e f="mycontroller/getfile/1"/>Download</a>

ただし、上記の場合、日付は動的になります。

ajax を使用しない場合、javascript を使用して MVC コントローラーにパラメーターを渡すための好ましい方法は何ですか?

例:

window.location  = "mycontroller/GetFile/" + $("#fromDate").val();

日付が 12-25-2012 であると仮定

これは生産しますか

mycontroller/GetFile/12/25/2012

MVC はこれを 3 つのパラメーターとして扱いますか?

4

4 に答える 4

11

What I ended up doing is calling my controller from my javascript like:

var url = "/mycontroller/GetFile?startDate=" + $("#mydate").val() + etc...

window.location = url;

mycontroller.cs

 public void GetFile(DateTime startDate) 
{

}

My original concern was with the date parameters. I didnt want to have to parse it.

于 2013-01-07T15:11:55.850 に答える
3

コントローラー クラスのメソッドを使用してFile、ファイルをブラウザーに返すことができます。

以下のサンプルは、pdf ファイルを返します。

public ActionResult GetFile(int id)
{
  var fileInfo=repositary.GetFileDedetails(id);
  var byteArrayOFFile=fileInfo.FileContentAsByteArray();
  return File(byteArrayOFFile,"application/pdf","yourFriendlyName.pdf");
}

repositary.GetFileDedetailsメソッドがidからファイルの詳細を返すと仮定します。

物理的な場所 (パス) またはストリームからファイルを返すこともできます。メソッドのすべてのオーバーロードを確認し、File適切なものを使用してください。

これはajaxとは関係ありません。これはブラウザを介した通常のGETリクエストです。

于 2012-12-30T04:15:02.580 に答える
3

ActionLink ヘルパーを使用すると、複数のパラメーターをコントローラーに渡すことができます。

HtmlHelper.ActionLink(
    string linkText, 
    string actionName, 
    string controllerName, 
    object routeValues, 
    object htmlAttributes
)

だからあなたの場合:

@Html.ActionLink("Download file", "GetFile", "MyController", new { startDate = "##" }, new { id="mydownloadlink" })

jQuery を使用するstartDateと、リンクの値を日付ピッカーまたはテキスト ボックスの内容に変更できます。

$("#mydownloadlink").attr("href").replace("##", $("#yourdatetexbox").val);

次に、コントローラーで、ここで他の回答のいずれかを使用します about FileResult.

これがお役に立てば幸いです...

于 2012-12-30T14:32:35.400 に答える
1

コントローラのアクションメソッドは、voidではなくFileResultを返す必要があります。また、AJAXを介してこれを行う必要はありません。実際、AJAXを使用してこれを行う必要はありません。ユーザーにダウンロードダイアログを提供することを認識できるように、ブラウザを関与させる必要があります。

これらのリンクを参照してください。

(jQuery)Ajax呼び出しで返されたASP.NETMVCFileResultの処理

Asp.NetMVC2でのファイルのダウンロード

これがお役に立てば幸いです。

于 2012-12-30T03:44:13.997 に答える