форма с типом ввода = текст не работает при рендеринге внутри модального диалога jquery - PullRequest
0 голосов
/ 17 февраля 2012

Я использую всплывающую форму из этого URL: http://nickstips.wordpress.com/2011/08/11/asp-net-mvc-ajax-dialog-form-using-jquery-ui/. Он загружает диалог jquery внутри div с помощью функции load.

У меня есть форма с несколькими текстовыми полями и 1 полем для загрузки файла. Эта форма работает правильно, и я успешно опубликовал эту форму в действии и восстановил объект HttpPostedFile.

Но когда я загружаю ту же форму в диалоге 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 голосов
/ 17 февраля 2012

Убедитесь, что для тега <form> в вашем модальном окне enctype="multipart/form-data" установлено правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...