我想使用jquery对话框上传文件。 我创建了一个局部视图,并在对话框中显示了部分视图。
问题是,当我直接浏览局部视图并上传文件时,它完美无缺。 但是当我将部分视图放在jquery对话框中时,它会提交表单,但不提交文件。所以我有空值。 我真的不明白这里的区别是什么!!
希望有人能帮助我找出问题。
这里有一些代码;
jquery代码:
$('#UploadDialog').dialog({
autoOpen: false,
width: 580,
resizable: false,
modal: true,
open: function (event, ui) {
$(this).load('@Url.Action("Upload","Notes")');
},
buttons: {
"Upload": function () {
$("#upload-message").html('');
$("#noteUploadForm").submit();
},
"Cancel": function () {
$(this).dialog("close");
}
}
});
$(".uploadLink").click(function () {
$('#UploadDialog').dialog('open');
});
return false;
});
局部视图:
@using (Ajax.BeginForm("Upload", "Notes", null, new AjaxOptions
{
UpdateTargetId = "upload-message",
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST",
OnSuccess = "uploadSuccess"
}, new { id = "noteUploadForm" , enctype="multipart/form-data"}))
{
<div>
<div id="upload-message"></div>
<div class="editLabel">
@Html.LabelFor(m => m.Notes.NoteTitle)
</div>
<div class="editText">
@Html.TextBoxFor(m => m.Notes.NoteTitle)
</div>
<div class="clear"></div>
<div class="editLabel">
@Html.Label("Upload file")
</div>
<div class="editText">
<input type="file" name="file" />(100MB max size)
</div>
</div>
}
答案 0 :(得分:1)
答案 1 :(得分:0)
无法通过ajax直接上传文件内容,您需要序列化文件数据。您需要使用一些插件来执行此操作,或手动序列化文件数据。一些现成的插件是:
其次,请记住,JQuery对话框将输入元素移出Form。看到这个问题:
Input inside Jquery UI Dialog not being sent?
确保在提交前附加元素
答案 2 :(得分:0)
您无法使用ajax提交包含multipart / form-data的表单。你需要使用一些插件。
另一种解决方法(获得类似ajax的效果)是在视图中使用iframe( <iframe>
)隐藏,然后发布将此iframe表单设为目标。如果需要,您可以使用此类表单创建对话框。
<form action="controller/action" method="post" target="iframename" id="yourformid">
现在在iframe上你可以为load事件绑定以检查帖子的状态,如:
$('#iframename').load(function(){.......});