【发布时间】: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<YourClass>(YourModel); -
@freedomn-m 试过了,谢谢,但我仍然收到错误的请求。
-
@NagibMahfuz 谢谢,但是一旦我再次使用它,它就可以正常使用我的操作方法参数。
标签: javascript jquery asp.net-mvc