【发布时间】:2016-02-10 15:42:38
【问题描述】:
我正在使用 ASP.NET MVC5。我的目标是使用 jQuery ajax 上传文件。成功后,返回表格中已上传文件的部分视图。当我单步执行 jQuery 代码时,id 和 files 是正确的,但是当我单步执行 Action 时,这两个参数都是空的。这是我的代码:
控制器的动作:
[HttpPost]
public ActionResult AddAttachments(string id, IEnumerable< HttpPostedFileBase> files)
{
if (files != null)
{
//save files
}
var cardKey = db.CardKeys.Single(s => s.CardKeyID == Convert.ToInt32(id));
var attachments = cardKey.Request.Attachments;
return PartialView("_AttachmentsTable",attachments);
}
jQuery:
$(function () {
var table = $("#attachmentTable").DataTable();
var path = MySettings.addAttachmentURL;
$("#btnAddAttachment").click(function (event) {
event.preventDefault();
var formData = new FormData();
var cardKeyID = $("#CardKeyID").val();
var formData = $.each($("#files")[0].files, function (i, file) {
formData.append('file-' + i, file);
});
console.log("formData = " + formData);
$.ajax({
type: "POST",
url: path,
contentType: false,
processData:false,
cache:false,
data: {id:cardKeyID,files: formData },
success: function (partialResult) {
$("#tableData").html(partialResult);
table = $("#attachmentTable").DataTable();
},
error: function (jqXHR, textStatus, errorThrown) {
$("#message").html(JSON.stringify(jqXHR).toString());
alert("AJAX error: " + textStatus + ' : ' + errorThrown);
}
});
});
});
剃刀视图:
<fieldset>
<legend>Add Attachments</legend>
<div class="row">
<div class="col-md-4">
<div class="form-group">
@Html.Label("File Upload", new { @class = "control-label col-md-6" })
<div class="col-md-6">
<input type="file" id="files" name="files" multiple/><br />
<input type="submit" id="btnAddAttachment" value="Add Attachment"/>
</div>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
@Html.Label("File Description", new { @class = "control-label col-md-6" })
<div class="col-md-6">
@Html.TextBox("FileDescription")
</div>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
@Html.Label("Comment", new { @class = "control-label col-md-6" })
<div class="col-md-6">
@Html.TextBox("Comment")
</div>
</div>
</div>
</div>
<div id="tableData">
@Html.Partial("_AttachmentsTable",Model.Request.Attachments)
</div>
</fieldset>
【问题讨论】:
-
不能使用ModelBinder来获取上传的文件,需要使用
Request.Files。有关详细信息,请参阅我标记为重复的问题。 -
我在调试模式下检查了Request对象并且Files属性是空的。
-
在这种情况下,请参阅工作代码的重复问题中的工作 jQuery 示例。
-
我试过那些jQuery代码,jQuery数据没问题,但是当将ajax数据传递给MVC动作时,参数都是空的。那是我的问题。
-
好的,我标记的副本确实有工作代码,但不能直接解决您的问题。我为你添加了答案。
标签: jquery ajax asp.net-mvc