#javascript #jquery #asp.net-mvc
#javascript #jquery #asp.net-mvc
Вопрос:
У меня есть этот 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)
Когда я нажимаю кнопку отправки, Ajax error
-функция jQuery вызывается до моей точки останова в начале метода действия, поэтому сам метод действия не возвращается Bad Request
, независимо от того, что пытается вызвать метод действия.
Есть ли какая-либо очевидная причина Bad Request
ошибки?
Комментарии:
1.
input[name="boqFile"]
Внутри#BoqReviewForm
? Просто догадываюсь, но будет ли он пытаться сериализовать в form.serializeArray() ? Попробуйте переместить его за пределы формы (в качестве теста)2. Извините, если я ошибаюсь. Но я думаю, вам не нужен параметр
model and boqFile
c# action
при отправке данных какformdata
. вы можете получить данные позже, как показано ниже, и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);
3. @freedomn-m пробовал это, спасибо, но я все равно получаю неверный запрос.
4. @NagibMahfuz Спасибо, но как только я снова заработал, он отлично работает с параметрами моего метода действий такими, какие они есть.
Ответ №1:
Оказывается, свойство viewmodel for boqFile
имеет самодельный атрибут аннотации данных, который должен проверять расширения файлов, например, только xlsx
to , и этот атрибут постоянно терпел неудачу, вызывая неверный запрос, потому что вызов ajax не возвращал модель с ошибками.
Я нашел это, пропустив вызов ajax и выполнив прямую обратную передачу, а затем я получил ошибку о расширении файла, которая была правильной. Я удалил ошибочный атрибут, и обратная передача вернула действительный json, предназначенный для вызова ajax. Затем я просто вернулся к вызову ajax, и все работает.