【问题标题】:Post files and object in the same AJAX request在同一个 AJAX 请求中发布文件和对象
【发布时间】:2015-09-30 10:02:27
【问题描述】:

我有一些数据和文件应该在同一个AJAX 请求中发布。尝试了一些解决方案,但我总是在控制器中得到null(文件发送良好,当我将Tester 类更改为简单的string 时,它也可以工作)。

我的 JS:

function sendAjaxWithFile (formData, successCallback, errorCallback) {
    successCallback = successCallback || function () { };
    errorCallback = errorCallback || function () { };

    $.ajax({
        url: "/Test/Save",
        type: "POST",
        data: formData,
        cache: false,
        processData: false,
        contentType: false,
        success: successCallback,
        error: errorCallback
    });
}

var data = new FormData();
data.append("tester", { Name: "QWERTY" });
data.append("someFile", file);

$scope.sendAjaxWithFile(data, function (response, textStatus, jqXHR) {
}, function (jqXHR, textStatus, errorThrown) {
});

以及服务器端代码:

[AjaxOnly]
[HttpPost]
[Route("Save")]
public async Task<JsonResult> Save(Tester tester, HttpPostedFileBase someFile)
{
    return await Task.FromResult(Json(0));
}

Tester类:

public class Tester
{
    public string Name { get; set; }
    public DateTime Date { get; set; }
}

【问题讨论】:

  • 请提供tester类和相关html
  • 这可能无关紧要,但是,尝试{ "Name": "QWERTY" } => 在Name 周围加上引号
  • 在控制器中仍然为空:(

标签: javascript jquery asp.net ajax http-post


【解决方案1】:

我做了一个解决方法,因为我认为它不能以正常的方式解决......

我的解决方案是发送从我的JS 对象序列化的字符串数据。

data.append("serializedJsonString", JSON.stringify({ Name: "QWERTY" })); // I can serialize what I want to

我需要更改我的Save 方法的参数以获取JSON 字符串数据并手动将其转换为Tester 类:

[AjaxOnly]
[HttpPost]
[Route("Save")]
public async Task<JsonResult> Save(string serializedJsonString, HttpPostedFileBase someFile)
{
    var decodedJson = HttpUtility.UrlDecode(serializedJsonString);
    var jTester = JObject.Parse(decodedJson);
    var tester = new Tester { Name = jTester["Name"].ToString() };

    return await Task.FromResult(Json(0));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 2018-10-24
    • 2014-12-08
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    相关资源
    最近更新 更多