Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC4 FileResult返回默认视图而不是文件_C#_Jquery_Asp.net Mvc - Fatal编程技术网

C# MVC4 FileResult返回默认视图而不是文件

C# MVC4 FileResult返回默认视图而不是文件,c#,jquery,asp.net-mvc,C#,Jquery,Asp.net Mvc,我在我的主控制器中创建了一个FileResult方法,它接受FormCollection并基于输入返回一个文件。该方法可以很好地获取数据,因为在检查Fiddler后,图像选项会作为图像返回。 下面是正在调用的控制器方法 public FileResult DownloadReport(FormCollection collection) { byte[] response; string fileName = ""; string contentType = "";

我在我的主控制器中创建了一个FileResult方法,它接受FormCollection并基于输入返回一个文件。该方法可以很好地获取数据,因为在检查Fiddler后,图像选项会作为图像返回。 下面是正在调用的控制器方法

public FileResult DownloadReport(FormCollection collection)
{
    byte[] response;
    string fileName = "";
    string contentType = "";
    string startDate = Convert.ToString(collection["hidden-start-date"]);
    string endDate = Convert.ToString(collection["hidden-end-date"]);
    string storeID = Convert.ToString(collection["hidden-store-id"]);
    string reportID = Convert.ToString(collection["hidden-report-id"]);
    string returnType = Convert.ToString(collection["hidden-return-type"]);
    DateTime dateStart = DataConversion.getDateTimeFromStringDateResponse(startDate.ToString());
    DateTime dateEnd = DataConversion.getDateTimeFromStringDateResponse(endDate.ToString());
    if (returnType == "pdf")
    {
        fileName = "report.pdf";
        contentType = "application/pdf";
    }
    if (returnType == "image")
    {
        fileName = "report.tif";
        contentType = "image/tiff";
    }
    if (returnType == "excel")
    {
        fileName = "report.xlsx";
        contentType = "application/vnd.ms-excel";
    }
    if (returnType == "word")
    {
        fileName = "report.docx";
        contentType = "application/msword";
    }

    SynchDB.User returnObject = (SynchDB.User)Session["SessionUserReturnObject"];
    response = SoapServiceController.getExportReportResponse(returnObject.AccountLogin, returnObject.AccountPassword, returnObject.CompanyID, Convert.ToInt64(storeID), 0, returnObject.ID, Convert.ToInt64(reportID), dateStart, dateEnd, returnType);
    Response.AppendHeader("Content-Disposition", "inline; filename=" + fileName);
    return File(response, contentType);
}
调用该方法的表单如下所示,它位于_Layout.cshtml文件中

<form id="form-content-type" method="post" action="@Url.Action("DownloadReport","Home")">
    <input type="hidden" id="hidden-report-id" name="hidden-report-id" />
    <input type="hidden" id="hidden-store-id" name="hidden-store-id" />
    <input type="hidden" id="hidden-start-date" name="hidden-start-date" />
    <input type="hidden" id="hidden-end-date" name="hidden-end-date" />
    <input type="hidden" id="hidden-return-type" name="hidden-return-type" />
</form>

每次调用该方法时,它都会返回默认视图,这是主控制器的默认路由,而不是返回文件


非常感谢您的帮助,谢谢

尝试在表单中添加
enctype
属性?@Akshay这会有用的原因是什么?能否请您澄清,如果POST请求返回非HTML文件,您预计会发生什么情况?我希望该文件会下载到用户的计算机上。我创建了get方法,使用作为文件返回的流将pdf返回到用户的下载文件夹,但当我尝试使用此方法返回使用post的文件时,我遇到了此问题当您使用
file
方法时,您不需要附加任何标题。尝试删除
Response.AppendHeader(“内容处置”、“内联;文件名=“+filename”)
并将返回语句更改为
返回文件(响应、内容类型、文件名)
downloadReport: function () {
    $.mobile.loading('show');
    $('#hidden-report-id').val(storage.readValue('reportID'));
    $('#hidden-store-id').val(storage.readValue('storeID'));
    $('#hidden-start-date').val(storage.readValue('startDate'));
    $('#hidden-end-date').val(storage.readValue('endDate'));
    $('#hidden-return-type').val(storage.readValue('returnType'));

    $('#form-content-type').submit();
}
$('#pdf-download-button').click(function () {
                $('#downloadPopup').popup('close');
                storage.storeValue("returnType", "pdf");

                DataAccess.downloadReport();
            })