【问题标题】:Why do I get a Bad Request with this jQuery post?为什么我收到这个 jQuery 帖子的错误请求?
【发布时间】:2020-10-27 08:50:35
【问题描述】:

我有这个 JavaScript 在单击表单的提交按钮时执行。它应该提交表单正文和文件:

$("#submitButton").off("click").on("click", function(evt) {
    evt.preventDefault();
    var url = "/portal/ProjectAuthority/Boq" + "?projectId=" + "0831260e-7018-dd49-9a84-daaf442bc1ec";

    debugger;
    var data = new FormData();

    //Form data
    var formData = $('#BoqReviewForm').serializeArray();
    $.each(formData, function (key, input) {
        data.append(input.name, input.value);
    });

    //File data
    var fileData = $('input[name="boqFile"]')[0].files;
    for (var i = 0; i < fileData.length; i++) {
        data.append("boqFile", fileData[i]);
    }

    $("#boqDataWrapper").empty();
    $.post({
        url: url,
        data: data,
        processData: false,
        contentType: false,
        success: function (resp) {
            setTimeout(function() {
                getBoqReviewData(resp.importId);
            },
            100);
        },
        error: function(xmlHttpRequest, textStatus, errorThrown) {
            alert(errorThrown);
        }
    });
    return false;
});

url 是:

http://localhost/portal/ProjectAuthority/Boq?projectId=0831260e-7018-dd49-9a84-daaf442bc1ec

动作方法签名是:

public ActionResult Boq(Guid projectId, BoqUploadViewModel model, HttpPostedFileBase boqFile)

当我单击提交按钮时,jQuery Ajax error 函数在我的断点之前在 action 方法的开头被调用,所以 action 方法本身没有返回 Bad Request,无论试图调用 action 方法是什么.

Bad Request 错误有什么明显的原因吗?

【问题讨论】:

  • input[name="boqFile"]#BoqReviewForm 内吗?只是猜测,但它会尝试以 form.serializeArray() 的形式进行序列化吗?尝试将其移出表单(作为测试)
  • 对不起,如果我错了。但是我认为当您以formdata 发送数据时,您不需要c# action 中的参数model and boqFile。如果需要,您可以稍后接收如下数据和Deserialize 到模型。 var boqFile= System.Web.HttpContext.Current.Request.Files["boqFile"];这个用于文件,下面用于模型数据var YourModel= System.Web.HttpContext.Current.Request.Params["YourModel"]; var model= JsonConvert.DeserializeObject&lt;YourClass&gt;(YourModel);
  • @freedomn-m 试过了,谢谢,但我仍然收到错误的请求。
  • @NagibMahfuz 谢谢,但是一旦我再次使用它,它就可以正常使用我的操作方法参数。

标签: javascript jquery asp.net-mvc


【解决方案1】:

原来boqFile 的 viewmodel 属性有一个自制的数据注释属性,它应该验证文件扩展名,例如仅xlsx,并且该属性不断失败,导致错误请求,因为 ajax 调用没有返回带有错误的模型。

我通过跳过 ajax 调用并进行直接回发发现了这一点,然后我收到了关于文件扩展名的错误,这是正确的。我删除了错误属性,回发返回了用于 ajax 调用的有效 json。然后我又回到了 ajax 调用,一切正常。

【讨论】:

    猜你喜欢
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多