【发布时间】:2020-04-30 20:49:48
【问题描述】:
我在互联网上搜索了这个 JavaScript 和 jQuery 模板,用于文件上传进度条,它可以 100% 正常工作(因为您只使用一个表单输入)。
我的情况是我需要将一个文件和 4 个其他输入(如文本)传递给控制器操作。动作效果很好。我的问题是通过 ajax 将所有这些值传递给 Action,同时保持进度条功能。
动作参数
[HttpPost]
public ActionResult Add_Attachment_to_Process(int id, int Department_id, HttpPostedFileBase Attachment, string sel_checkTask, string cbx_checkTask = null)
HTML
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<form method="post" enctype="multipart/form-data" action="/Processes/Add_Attachment_to_Process" id="myform">
<input type="file" id="media" name="file" />
<div class="input-group mb-3">
<div class="input-group-prepend">
<div class="input-group-text">
<input type="checkbox" aria-label="Checkbox for following text input" id="cbx_checkTask" name="cbx_checkTask">
<span id="span_checkTask">Link Task</span>
</div>
</div>
<select class="form-control" id="sel_checkTask" name="sel_checkTask" style="width : 700px;" disabled>
@foreach (var t in Model.User_Tasks)
{
<option value="@t.Task_Discription">@t.Task_Discription - @t.Key_Terms</option>
}
</select>
</div>
<input id="id" name="id" value="@ViewBag.process_id " />
<input id="Department_id" name="Department_id" value="@ViewBag.Department_id" />
<input type="submit" />
</form>
<div class="progress" style="width:40%">
<div id="uploadprogressbar" class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width:0%">
0%
</div>
</div>
JavaScript
$(document).ready(function () {
$("#myform").on('submit', function (event) {
event.preventDefault();
var formData = new FormData($("#myform")[0]);
$.ajax({
xhr: function () {
var xhr = new window.XMLHttpRequest();
xhr.upload.addEventListener('progress', function (e) {
if (e.lengthComputable) {
console.log('Bytes Loaded: ' + e.loaded);
console.log('Total Size: ' + e.total);
console.log('Percentage Uploaded: ' + ((e.loaded / e.total) * 100) + '%');
var percent = Math.round((e.loaded / e.total) * 100);
$("#uploadprogressbar").html(percent + '%');
$("#uploadprogressbar").width(percent + '%');
}
});
return xhr;
},
type: 'POST',
url: '/Processes/Add_Attachment_to_Process',
data: formData,
processData: false,
contentType: false,
success: function () {
alert('File Uploaded');
},
error: function (xhr, status, error) {
var errorMessage = xhr.status + ': ' + xhr.statusText;
alert('Error - ' + errorMessage);
}
});
});
});
【问题讨论】:
-
有什么问题?
-
当我使用多个输入时,进度条工作,但没有调用动作。
-
“formData”的结果是什么?您使用的是 .net 核心吗?
-
不,我没有使用核心。请告知如何获得'formData'的结果。
-
在'var formData = new FormData($("#myform")[0]);'下面添加'console.log(formData)'
标签: javascript jquery html ajax asp.net-mvc