2013-04-10 2 views
1

Я знаю, что это обсуждалось много раз.Загрузка файла с помощью ajax в asp.net mvc

В основном я хочу, чтобы на мой взгляд, чтобы обновить файл. Этот файл должен быть отображен в модели контроллер ожидает:

public ActionResult Create(Company company) 
{ 
    //Do something with the received model 
} 

модели:

public class Company 
{ 
    public int Id { get; set; } 
    public HttpPostedFileBase PictureUpload { get; set; } 
    ... 
} 

Это работает без каких-либо проблем. Теперь я хочу отправить свои данные формы, включая файл, через AJAX. Поэтому я использую это на мой взгляд:

@using (Ajax.BeginForm("Create", "Company", null, new AjaxOptions { HttpMethod = "Post", OnSuccess = "ajaxOnSuccess", OnFailure = "alert('Error message.');" }, new { @class = "ym-form", enctype = "multipart/form-data" })) 

В основном это работает, но загрузка файла не работает (насколько я читал Аякса не имеет доступа к файлу, поэтому он не может быть отправлен).

Я бы хотел, чтобы это лучшее решение для этой проблемы, без необходимости изменять мой backend (контроллер/модель).

E. g. Я прочитал эту статью: http://ajeeshms.in/Blog/Article/1/upload-files-using-ajax-in-asp-mvc

Это обеспечивает два хороших возможностей, но я должен был бы изменить бэкенд, потому что, насколько я вижу, автоматически картографирования к типу HttpPostedFileBase в моей модели не было бы возможно больше.

Я не против использования какого-либо рабочего плагина для моего представления или с использованием техники, поддерживаемой только новыми браузерами.

+0

Вы можете использовать Ajax с html5 файла апи. [См. Это сообщение] (http://timothypoon.com/blog/2011/05/10/ajax-uploading-with-html5s-file-api/) – karaxuna

+0

Взгляните на мой принятый ответ: http: // stackoverflow. com/questions/18440220/how-to-upload-file-in-strong-type-view-in-asp-net-mvc/18441187 # 18441187 –

ответ

0

Пожалуйста, попробуйте это один @using (Html.BeginForm("Create", "Company", FormMethod.Post, new { id = "ym-form", enctype="multipart/form-data" }))

+0

Извините, я должен использовать ajax по разным причинам ... – mosquito87

+0

You можно попробовать <% using (Ajax.BeginForm («Создать», «Компания», новый AjaxOptions() {HttpMethod = «POST», InsertionMode = InsertionMode.Заменить}, new {enctype = "multipart/form-data"})) {%> <% } %> – Sudha

0

Я думаю, что вы не можете загружать файлы с помощью AJAX. Один из способов добиться этого - использовать скрытый iframe. Попробуйте это jQuery Form plugin и Telerik file control

См. Также этот номер link.

0

Я сделал это на основе этого ответа от Демьяна Флавия: How to do a ASP.NET MVC Ajax form post with multipart/form-data?

В основном это новый FormData объект в JavaScript, что делает его легким для загрузки с помощью AJAX, как в статье ваш упоминается.

1

Попробуйте этот код

// Добавить ссылку на form.js

<script src="http://malsup.github.com/jquery.form.js"></script> 

@using (Html.BeginForm("Create", "Company", FormMethod.Post, new { @enctype ="multipart/form-data",@id="formid" })) 
{ 

} 

//Javascript code 

<script type="text/javascript"> 

$('#formid').ajaxForm(function (data) { 

}); 

</script> 

Это будет работать как AJAX Submit.

// Вы можете получить более подробную информацию о AjaxForm here

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