您無法使用MVC Ajax幫助程序進行文件上傳。 相反,你可以使用jquery form plugin,在一個正常的Html.BeginForm()
。
例子:
<form id="myForm" url="/Home/Upload" method="post" enctype="multipart/form-data">
<label>File</label>
<input name="file" type="file" />
</form>
<script>
function bindAjaxForm(selector, onComplete, beforeSerialize) {
var form = $(selector);
$.validator.unobtrusive.parse(selector);
form.data("validator").settings.submitHandler = function (frm) {
$(frm).ajaxSubmit({
beforeSerialize: function ($form, options) {
if (typeof (beforeSerialize) === "function") {
beforeSerialize($form, options);
}
},
complete: function (response, statusText) {
if (typeof onComplete === "function") {
onComplete(response, statusText);
}
}
});
}
};
bindAjaxForm("#myForm", function(data, status) {
alert("complete");
console.log(arguments);
});
</script>
您使用onComplete
和beforeSerialize
回調處理響應。
onComplete
在AJAX完成後調用,如果您的參數爲console.log
,您會看到它包含AJAX響應(json/html)。
嘗試這樣:
bindAjaxForm("#myForm", function(data, status) {
$("#container").html(data);
});
不能使用'Ajax.BeginForm()'上傳文件。但是,您可以用'$阿賈克斯()'和'FormData' - 參見[這個答案](http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to- formdata-and-obtain-it-in-mvc/29293681#29293681)(但它有點不清楚爲什麼你要分開發布文件和表單數據) –
@StephenMuecke謝謝,這意味着我可以上傳表單數據+上傳文件在同一時間使用$ .ajax和formdata? – VAAA
當然 - '變種FORMDATA =新FORMDATA($( '形式')得到(0));'將您的序列化表單控件,包括文件輸入。您只需根據鏈接設置正確的ajax選項即可。 –