1

私の問題は次のとおりです。mvc3 プロジェクトがあります。問題は、Excel シートの読み込みページにあります。まず、Excel シートをデータベースにアップロードします。次に、その Excel シートに基づいて pdf を作成し、その pdf をユーザーに返します。最後に、新しい Excel シートが読み込まれた ui の行を更新したいと思います。

したがって、主な問題は、pdfドキュメントをユーザーに渡した後に行を更新できないことです。

これは私が試した短い例です。まず、アップロードのクライアント側。(私は Microsoft.Web.Helpers.FileUpload コンポーネントを使用しています):

     @using (Html.BeginForm("NewFile", "LoadData", FormMethod.Post, new { enctype = "multipart/form-data" }))
     {      
        @FileUpload.GetHtml(initialNumberOfFiles: 1, allowMoreFilesToBeAdded: false, includeFormTag: false, addText: "Add Files", uploadText: "Upload File")
        <input type="submit" name="submit" id="submit" value="Lataa tiedot" />
     }

ユーザーが送信ボタンを押した後、以前にテキストで紹介した機能が発生するはずです。これは、Excelシートをロードしてpdfドキュメントを作成する方法です:

[HttpPost]
public ActionResult NewFile(IEnumerable<HttpPostedFileBase> fileUpload, bool checkPrintAlso, bool chkBigCards, int hiddenCustomer, string comment)
{
    try
    {
        foreach (var file in fileUpload)
        {
        if (file != null && file.ContentLength > 0)
            {
                var excelService = new ExcelService();
                var trackingCodes = excelService.NewLoadData(file, User.Identity.Name, comment, hiddenCustomer);
                if (checkPrintAlso)
                {
                    CreatePdf(trackingCodes, chkBigCards);
                    return new EmptyResult();
                }
            }

        return RedirectToAction("Index", error);
    }
    catch (Exception e)
    {

    }
}

null または emptyResult pdf 以外のものを返すと、ユーザーに返されなくなります。これは、Pdf を作成し、応答にデータを書き込む方法です。

[HttpPost]
public void CreatePdf(IEnumerable<TrackingCode> trackingCodes, bool isBig)
{
    //This creates pdf
    var blackGinBarCodePdf = new BlackGinBarcodePdf(trackingCodes, isBig);
    Response.ContentType = "application/pdf";
    Response.AddHeader("Content-Disposition", string.Format(CultureInfo.InvariantCulture, "attachment;filename=Receipt-{0}.pdf", "briefcases"));
    Response.BinaryWrite((byte[])blackGinBarCodePdf);
}

私はjqueryとajaxを処理しようとしましたが、そのpdfドキュメントがユーザーに渡された後に処理を続行できましたが、たとえばajaxを実行すると、投稿操作は成功メッセージを返しません。Mozilla ではエラー コード 0 が返され、IE ではコード 500 (内部サーバー エラー) が返されます。これは、私がajaxに投稿しようとした方法です:

$("#submit").click(function () 
{
    $.ajax(
    {
        url: "/LoadData/NewFile",
        type: 'post',
        error: function (xhr, ajaxOptions, thrownError) 
        {
            alert(xhr.status);
            alert(thrownError);
        },
    success: function (data) { }
    })
    //add row to ui!
    ;
});

誰かが私の問題を理解してくれることを願っています。もう一度、ボタンをクリックした後に必要なことをステップ実行します。1. Excel を db にロードします。 2. Excel を解析して pdf にします。 3. pdf をユーザーに返します。4. UI の更新 (問題は、pdf をユーザーに返した後に UI を更新することです)

誰かが私を助けることができれば、私は本当に高く評価しました。私は本当に混乱していますどうすればそれを行うことができますか?

4

1 に答える 1

0

1 つの応答でファイルとその他のデータを返すことはできません (実際にはそれを行うことはできますが、ブラウザーによって正しく処理されません)。正しい方法は次のとおりです。

  1. PDF(または単にExcel)をサーバー(ファイルシステム/データベース)のどこかに保存します
  2. 結果ステータスとファイルの ID を含む JSON (またはその他の結果) を返します
  3. クライアント(AJAXではなく、単純にwindow.locationを変更するか、フォームをURLに投稿するだけ)から、ファイルIDを使用してURLにリクエストを送信します
  4. この URL のアクションから FileResult (http://msdn.microsoft.com/en-us/library/system.web.mvc.fileresult.aspx) を返す
于 2012-08-16T08:28:31.680 に答える