диалоговое окно не появляется после загрузки asp.net mvc 2 - PullRequest
1 голос
/ 09 мая 2011

мой диалог не появляется после успешной загрузки?загрузка работает нормально, но $ ("# dialog-verify"). диалог не работает?

<h2>
    upload Data</h2>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
<script src="../../Scripts/jqueryform.js" type="text/javascript"></script>
<script src="../../Scripts/jblock.js" type="text/javascript"></script>

<script src="../../Content/jquery-ui-1.8.12.custom/js/jquery-ui-1.8.12.custom.min.js"
    type="text/javascript"></script>

<link href="../../Content/jquery-ui-1.8.12.custom/css/ui-lightness/jquery-ui-1.8.12.custom.css"
    rel="stylesheet" type="text/css" />



<script type="text/javascript">
    $(function () {
        $("#ajaxUploadForm").ajaxForm({
            iframe: true,
            dataType: "json",
            beforeSubmit: function () {
                $("#ajaxUploadForm").block({ message: '<h1><img src="/Content/busy.gif" /> uploading file...</h1>' });
            },
            success: function (result) {
                $("#ajaxUploadForm").unblock();
                $("#ajaxUploadForm").resetForm();
                $.growlUI(null, result.message);

                //alert(result.message);

                //does not popup??
                $("#dialog-confirm").dialog({
                    resizable: false,
                    height: 140,
                    modal: true,
                    buttons: {
                        "Ok":
                        function () {
                            alert('ok');
                            $(this).dialog("close");
                        }
                    ,
                        Cancel: function () {
                            $(this).dialog("close");
                        }
                    }
                });


            },
            error: function (xhr, textStatus, errorThrown) {
                $("#ajaxUploadForm").unblock();
                $("#ajaxUploadForm").resetForm();
                $.growlUI(null, 'Error uploading file');
            }
        });
    });
</script>
<form id="ajaxUploadForm" action="<%= Url.Action("AjaxUpload", "Home")%>" method="post"    enctype="multipart/form-data">
<fieldset>
    <legend>Upload a file</legend>
    <label>
        File to upload:
        <input type="file" name="file" />(100MB max size)</label>
    <input id="ajaxUploadButton" type="submit" value="Submit" />
</fieldset>
</form>


  public FileUploadJsonResult AjaxUpload(HttpPostedFileBase file)
    {
        // TODO: Add your business logic here and/or save the file
        System.Threading.Thread.Sleep(2000); // Simulate a long running upload

        // Return JSON
        return new FileUploadJsonResult { Data = new { message = string.Format("{0} uploaded successfully.", System.IO.Path.GetFileName(file.FileName)) } };
    }

1 Ответ

0 голосов
/ 09 мая 2011

Я вижу, что вы используете плагин jquery.form для AJA, изменения формы и возврата JSON из действия вашего контроллера.Вот что документация говорит об этом сценарии:

Поскольку невозможно загружать файлы с помощью объекта XMLHttpRequest браузера, плагин Form использует скрытый элемент iframe, чтобы помочь сзадача.Это обычная техника, но она имеет свои ограничения.Элемент iframe используется в качестве цели операции отправки формы, что означает, что ответ сервера записывается в iframe.Это хорошо, если тип ответа - HTML или XML, но не работает так же хорошо, если тип ответа - скрипт или JSON, оба из которых часто содержат символы, которые должны быть представлены с использованием ссылок на сущности, когда они найдены в разметке HTML.

Чтобы учесть проблемы ответов сценариев и JSON, плагин формы позволяет встраивать эти ответы в элемент textarea, и рекомендуется делать это для этих типов ответов при использовании в сочетании с загрузкой файлов.

Итак, чтобы это работало, ответ от сервера должен выглядеть следующим образом:

<textarea>{ message: 'file uploaded successfully' }</textarea>

Это то, что этот пользовательский FileUploadJsonResult делает в действии вашего контроллера?

...