在jquery模式对话框中渲染时,输入类型=文本不起作用的表单

时间:2012-02-17 09:20:36

标签: jquery asp.net-mvc-3

我正在使用此网址的弹出窗体:http://nickstips.wordpress.com/2011/08/11/asp-net-mvc-ajax-dialog-form-using-jquery-ui/。它使用load函数在div中加载一个jquery对话框。

我有一个包含多个文本字段和一个上传文件字段的表单。此表单正常工作,我已成功将此表单发布到操作并恢复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表单,所以我别无选择,只能使用这个库:

http://code.google.com/p/ajax-file-upload-struts2/source/browse/trunk/src/main/resources/template/com/davidjc/javascript/ajaxfileupload.js?r=4

它使用表单元素创建一个不可见的iframe,并自动发布到服务器。

由于
czetsuya

1 个答案:

答案 0 :(得分:0)

确保模态窗口中的<form>标记设置正确enctype="multipart/form-data"