【发布时间】:2014-05-19 12:53:46
【问题描述】:
在我的一个页面上,我使用多个表单,每个表单都包含特定的数据(因此有一个包含用户名、姓等的表单。还有一个包含用户地址等的表单)。每个表单都有一个“保存更改”按钮,我使用 Ajax 调用将数据提交到服务器。问题是 - 在其中一个表格上,用户可以上传他的图片,使用 Bootstrap 文件上传(所以,首先他选择图片,然后点击“保存” - 只有这样文件才会发送到服务器),但我不能在不重新加载页面的情况下找到任何方法。
首先我尝试使用隐藏的iframe,但我似乎无法将我的文件数据复制到 Iframe,所以这是不行的。
现在我正在尝试使用它:
但是,一旦我将它包含在我的页面中,Bootstrap 文件上传器就会停止正常工作,也就是说 - 每次我选择一张图片时,它都会自动开始文件上传。奇怪的部分是 - 即使任何地方都没有文件上传器的初始化代码,它也会发生,只需包含代码。我尝试了建议的“修复”,即 - 我尝试像这样覆盖 add 方法:
$('#file').fileupload({
dataType: 'json',
add: function (e, data) {
data.context = $('<button/>').text('Upload')
.appendTo(document.body)
.click(function () {
data.context = $('<p/>').text('Uploading...').replaceAll($(this));
data.submit();
});
},
done: function (e, data) {
data.context.text('Upload finished.');
}
});
但是由于某种原因,“添加”没有被击中......
我在这里做错了什么?或者有没有其他方法可以实现我想要的东西?
编辑 1:
这是我用于图片上传的代码:
@using (Html.BeginForm("ProfileSavePictureData", "Animator", FormMethod.Post, new { enctype = "multipart/form-data", id = "pictureDataForm" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(null, new { id = "profilePictureDataValidationSummary" })
@Html.HiddenFor(x => x.UserDataId)
@Html.HiddenFor(x => x.UserId)
<div class="form-group">
<div class="fileupload fileupload-new" data-provides="fileupload">
<input type="hidden" value="" name="" />
<div class="fileupload-new thumbnail" style="width: 200px; height: 150px;">
@if (Model == null || String.IsNullOrEmpty(Model.Picture))
{
<img src="http://www.placehold.it/200x150/EFEFEF/AAAAAA&text=no+image" alt="">
}
else
{
<img src="@Model.Picture" alt="@ViewBag.PictureNotAviableLabel" alt="">
@Html.HiddenFor(x => x.Picture)<br />
}
</div>
<div class="fileupload-preview fileupload-exists thumbnail" style="max-width: 200px;
max-height: 150px; line-height: 2px;">
</div>
<div>
<span class="btn default btn-file"><span class="fileupload-new"><i class="fa fa-paper-clip">
</i>
@ViewBag.ChoosePicture
</span><span class="fileupload-exists"><i class="fa fa-undo"></i>
@ViewBag.ChangePicture
</span>
<input type="file" class="default" name="file" />
</span><a href="#" class="btn red fileupload-exists" data-dismiss="fileupload"><i
class="fa fa-trash-o"></i>
@ViewBag.RemovePicture
</a>
</div>
</div>
<span class="label label-danger">
@ViewBag.InfoLabel
</span><span>
@ViewBag.PictureMinatureWarning
</span>
</div>
<div class="margin-top-10">
<button id="btnSaveChengesProfilePictureData" type="button" class="btn btn-default">@ViewBag.SaveChangesButtonLabel</button>
<input type="submit" />
</div>
}
正如你所看到的,底部有两个按钮——我想要的也不是……
【问题讨论】:
-
你能显示你的html代码吗?还是创建 jsfiddle ?
-
@TechnoKnol:Jsfiddle 很难,但是,请查看我的编辑 - 我添加了负责图片上传的部分。希望这可以帮助。提前致谢。
标签: html asp.net-mvc-4 jquery-file-upload asyncfileupload