【发布时间】:2012-02-17 09:20:35
【问题描述】:
我正在使用来自此网址的弹出式表单:http://nickstips.wordpress.com/2011/08/11/asp-net-mvc-ajax-dialog-form-using-jquery-ui/。它使用 load 函数在 div 中加载一个 jquery 对话框。
我有一个包含多个文本字段和 1 个上传文件字段的表单。此表单工作正常,我已成功将此表单发布到操作并恢复 HttpPostedFile 对象。
但是,当我使用 load 函数在 jquery 对话框中加载相同的表单并将相同的表单发布到之前工作的相同操作时,它失败了。我不知道为什么,但 HttpPostedFile 对象始终为空。
实际代码: 使用上面指定的 DialogForm.js 我调用了辅助函数:
@Html.DialogFormButton("Add", Url.Action("Add", "X", new { id = y }), "", "targetId", Url.Action("List", "X", new { id = y }))
此代码应在模式弹出窗口中加载视图:
$('.dialogLink').live('click', function () {
var element = $(this);
...
$(dialogDiv).load(this.href, function () {
$(this).dialog({
modal: true,
resizable: false,
title: dialogTitle,
buttons: {
"Save": function () {
// Manually submit the form
var form = $('form', this);
$(form).submit();
},
...
实际上我调用了一个视图,视图加载了一个编辑器模板。
@using (Ajax.BeginForm("Test", "X", new { }, new AjaxOptions { }, new { enctype = "multipart/form-data" }))
{
@Html.EditorFor(m => Model, "editorView")
}
编辑器视图包含几个文本框和输入类型文件元素:
<tr>
<td class="label">
@Html.LabelFor(m => m.PathToAttachment)
</td>
<td>
<div class="field_container">
@Html.TextBoxFor(m => m.FileUpload, new { type = "file" })
</div>
</td>
</tr>
所有元素都是模型类的成员。 Post Add 方法的参数是什么:
[HttpPost]
public ActionResult AddAttachment(AttachmentModel model) {
if (model.FileUpload.ContentLength > 0) { }
}
问题:model.FileUpload 始终为 null,但剩余的表单元素具有值。请注意,它仅在我使用 DialogForm.js 加载表单时发生。否则,当我在一个简单的页面(不是弹出窗口)中加载表单时,我可以成功获取 FileUpload 值。
已解决,我发现无法提交带有文件的ajax表单,所以我别无选择,只能使用这个库:
它使用表单元素创建一个不可见的 iframe 并自动发布到服务器。
谢谢
切苏亚
【问题讨论】:
-
包括代码的相关部分 - jQuery/Javascript 以及 HTML。
-
说真的,请添加代码或不起作用的示例,当您的问题如此模糊时,没有人可以帮助您:)
-
抱歉,代码已添加。
标签: jquery asp.net-mvc-3