2016-01-21 4 views
0

У меня есть тип ввода = «файл», и при изменении этого ввода я хочу отправить форму.ajax post form делает перенаправление страницы

$(document).on("change", "#image-upload", function (e) { 
    $.ajax({ 
     url: '/BlogPost/UploadHomeReport', 
     type: 'POST', 
     data: $('#upload-image-form').serialize(), 
     success: function (response) { 
      console.log(response); 
     } 
    }); 
}); 
<form action="~/BlogPost/UploadHomeReport" method="post" enctype="multipart/form-data" id="upload-image-form"> 
    <input type="file" id="image-upload" name="file" /> 
    <input type="text" name="destinationId" id="destinationId" /> 
</form> 
[HttpPost] 
public JsonResult UploadHomeReport(HttpPostedFileBase file, int destinationId) 
{ 
    var fileName = Path.GetFileName(file.FileName); 
    file.SaveAs(Server.MapPath("~/App_Data/UploadedImages/" + destinationId + fileName)); 
    var path = Server.MapPath("~/App_Data/UploadedImages/" + destinationId + fileName); 
    return Json(path); 
} 

Все работает отлично, но когда он должен вернуть JSON перенаправляет на новую страницу. Почему он не возвращает JSON вместо перенаправления?

+0

Попробуйте удалить «действие» в форме –

+0

Если я сделаю так, то файл в UploadHomeReport actionmethod станет null :( –

+0

Но вы не отправляете, отправляя, вы используете, ajax, не так ли? Возможно, именно поэтому это перенаправление, может быть, где-то в коде отправляется –

ответ

0

Похоже, что у вас есть другие проблемы в вашем коде. Поскольку это слушатель изменений, он не отправляется автоматически. Что-то еще вызывает перенаправление. Вам нужно будет вставить ответ, который вы получаете (302?), И отладить оттуда.

Кроме того, удалите действие в теге формы, чтобы увидеть, все еще отправлено, но лучше предоставить резервную копию, если ваше приложение может работать без javascript.

+0

Удаление нисходящего канала для отредактированного ответа – mhodges

+0

Это точно проблема, но пока OP не доставляет , мы не можем больше делать = \ – mhodges

-1

Действие вашей формы по умолчанию. Вам необходимо остановить отправку формы с помощью e.preventDefault();

Когда происходит событие изменения, следующий метод захватывает и обрабатывает.

Из пути URL-адреса я хочу предположить, что это ASP.NET (возможно), который к тому времени обработка обработки формы будет делать обратную передачу.

+0

Я не верю, что это так. Doi ng a e.preventDefault() в этом событии ничего не сделает с формой, потому что если вы внимательно посмотрите, это не событие в форме. Это обработчик события для . Входы файлов автоматически не отправляют форму (по очевидным соображениям безопасности) – mhodges

+0

@mhodges вы можете объяснить, почему тогда? Я имею в виду, если я собираюсь занять это место, может кто-то хотя бы ответить на вопрос? –

+0

Я ответил на это в комментариях к сообщению. Проблема связана с кодом, который здесь не указан. Мы не можем предоставить ответ для кода, который мы еще не видим. OP нужно копать глубже и помогать нам, чтобы мы могли решить проблему, но я обещаю, что это не имеет никакого отношения к e.preventDefault() (по крайней мере, в коде, который он предоставил), возможно, необходимо будет помещатьDefault() где-то еще в его коде, но нам нужно больше информации, чтобы узнать, где) – mhodges

Смежные вопросы