1

我的问题如下:我有 mvc3 项目。问题出在 Excel 工作表加载页面中。首先,我想将 excel 表上传到数据库。接下来,我根据该 excel 表创建 pdf 并将该 pdf 返回给用户。最后我想更新 ui 中的行,新的 excel 表已经加载。

所以主要问题是在将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 加载到数据库 2. 将 excel 解析为 pdf 3. 将 pdf 返回给用户。4.更新ui(问题是在将pdf返回给用户后更新ui)

如果有人可以帮助我,我真的很感激。我真的很困惑我该怎么做?

4

1 回答 1

0

您不能在一个响应中返回文件和其他一些数据(好吧,实际上您可以这样做,但浏览器不会正确处理它)。正确的做法是:

  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 回答