2015-10-26 2 views
1

Я хочу загрузить форму в asp.net mvc. Это моя анкетаОтправить FormData для контроллера через ajax

<form id="fm" method="post" enctype="multipart/form-data"> 
<input type="text" name="no" id="txteno" data-bind="value: $root.PersonId" disabled="disabled" /> 
<input type="text" name="name" id="txtename" data-bind="value: $root.PersonName" /> 
<input type="file" name="file" accept="image/*" data-bind="file: {data: Photo, name: PersonPhoto, reader: someReader} " /> 
<button data-bind="click :$root.save" >Save</button> 
</form> 

Я использую данные формы для загрузки этой формы. Это моя точка зрения модели

var ViewModel = function() { 
//declare observable 
var perData = { 
//evaluate object 
}; 
var PerData = new FormData(); 
self.save = function() { 
//append data 
PerData.append('no',perData.PersonId()); PerData.append('name',perData.PersonName()); 
PerData.append('file', perData.Photo()); 
PerData.append('file', perData.PersonPhoto()); 
$.ajax({ 
type: "POST", 
url: "/Person/FileUpload", 
data: PerData, 
contentType: false, 
processData: false, 
cache: false, 
//mimeType: "multipart/form-data", 
success: function() { 
alert("Record Added Successfully"); 
}, 
error: function() { 
alert("fail");} 
});};}; 
var vm = new ViewModel(); 
ko.applyBindings(vm); 

и это мой контроллер

[HttpPost] 
public ActionResult FileUpload(Person item,HttpPostedFileBase file) 
{ //some code} 

отправки формы через AJAX является успешным, но вещь и передача файлов на мой контроллер, являются недействительными.

ответ

0

Вы должны рассмотреть перемещение «нажмите:» привязки на кнопке к «представляет:» обязательной форме.

Это позволит использовать данные формы, как так:

this.submit = function(form) { 
    var formData = new FormData($(form)[0]); 

    return false; 
} 

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

Вот мой пример скрипку, чтобы показать доказательство концепции:

http://jsfiddle.net/bryanray/h5osqq17/

Кроме того, имейте в виду, что имя поля на Ajax POST должны соответствовать непосредственно к параметрам контроллеров чтобы привязка .NET Model Binding правильно подключалась. Это соглашение основано.

0

Я предлагаю вам пройти form в .FormData(form):

var PerData = new FormData($('#fm')[0]); // pass the form here. 
self.save = function() { 
    // use ajax as is but remove the append to form data. 
}; 
+0

Я пробовал, но это не решает мою проблему – hamide

+0

Хорошо! 'perData.Photo()' он возвращает что-либо в вашем коде? – Jai

+0

PerData заполнена моделью просмотра, но ajax отправляет null в действие FileUpload – hamide

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