Диалог JQuery: как получить диалог для обновления с ошибками / сообщениями на стороне сервера - PullRequest
0 голосов
/ 19 декабря 2011

Я пытаюсь использовать диалоговое окно JQuery для вызова окна, скажем, кнопки добавления, которая, следовательно, покажет диалог с формой Html.BeginForm () внутри.

Либо с помощью кнопокв диалоговом окне или в диалоге внутри я хочу отправить форму, а затем получить ее обратно, чтобы показать обновление, которое было успешно добавлено, или показать, что с формой есть некоторые проблемы (например, серверошибки стороны)

EG:

public ActionResult EventSave(EventManageModel model)
{
        if (fake error, db save failed)
            ModelState.AddModelError("_FORM", "DB save failed!");
        return PartialView("EventManage", model);
}

Я думаю, что я получил правильную проверку на стороне клиента, используя:

$.validator.unobtrusive.parse("#EventManage");

Но мой большой вопрос на самом деле на стороне серверапроверка / получение данных на стороне сервера.Я не думаю, что удаленная проверка работает для меня, потому что такого рода ошибки были бы более / менее основанными на форме ошибками, например, вместо конкретного текстового поля.

Как я могу заставить это работать?Я действительно понятия не имею, я пытался теоретически везде, чтобы заставить это работать.

В момент, когда форма диалога отправляет, у меня есть что-то вроде этого:

      "Save": function () {
                    $.validator.unobtrusive.parse("#EventManage");

                    if ($("#EventManage").valid()) {

                        $.ajax({
                            url: "/Home/EventSave",
                            type: 'POST',
                            data: $("#EventManage").serialize(),
                            success: function (result) {
                                $("#EventManage").html(result);
                            },
                            error: function (result) {
                                $("#EventManage").html(result);
                            }
                        });
                    }
                },

Яоднако, не получая то, что я хочу, диалоговое окно, по-видимому, не обновляется и не обновляет частичное представление без ошибок.

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

http://iwantmymvc.com/dialog-form-with-jqueryui-and-mvc-3

Пожалуйста, дайте несколько советов, как это сделать?:)

РЕДАКТИРОВАТЬ:

My EventManage частичная форма: -

@model Harrods.Web.Models.EventManageModel


<div>
@using (Html.BeginForm("EventSave", "Home", FormMethod.Post, new { id = "EventManage", @class = "Dialog" }))
{
    @Html.ValidationSummary(false, "Please correct the errors below and try again:", new { @class = "ui-state-error ui-corner-all" })<br />
        <br />
        @Html.AntiForgeryToken()
        <fieldset>
        <legend>Event Details</legend>
        <br />
        @Html.Hidden("Id")
        <div class="editor-label-dialog">
            @Html.LabelFor(m => m.Event_Name)
        </div>
        <div class="editor-field-dialog">
            @Html.TextBoxFor(m => m.Event_Name)
            <br />
            @Html.ValidationMessageFor(m => m.Event_Name)
        </div>
        <p class="clear"></p>
        <br />
        <div class="editor-label-dialog">
            @Html.LabelFor(m => m.Event_Date)
        </div>
        <div class="editor-field-dialog">
            @Html.TextBoxFor(m => m.Event_Date)
            <br />
            @Html.ValidationMessageFor(m => m.Event_Date)
        </div>
        <p class="clear"></p>
        <br />
        <input type="submit" class="addNew" value="Save" />
        <div class='loading' style='display: none'><img src="@Url.Content("~/Assets/img/loading.gif")" title="Loading" /></div>
        </fieldset>
}
</div>

EDIT2

Похоже, что я заставил его работать на >> success: function (result)

, но это не входит в ошибку: function (result)

, хотя уже есть ошибка.

Ответы [ 2 ]

3 голосов
/ 12 сентября 2012

Ошибка .ajax: НЕ вызывается, если в состоянии модели есть ошибки, она вызывается в случае сбоя запроса ajax.

Что нужно сделать, это проверить результат и определить, есть ли ошибки.Это может быть сделано несколькими способами, как Json.

Возвращать объект Json, если EventSave завершается успешно, и возвращать частичный просмотр, если он не работает.Затем вы можете проверить, успешно ли это, и обработать случаи.

Вот пример

Код JS:

"Save": function () {
                $.validator.unobtrusive.parse("#CreateGroup")
                if ($("#CreateGroup").valid()) {
                    $.ajax({
                        url: "/Participant/CreateGroup",
                        type: "POST",
                        data: $("#CreateGroup").serialize(),
                        success: function (result) {
                            if (result.result == "success") {
                                $("#GroupAddDialog").dialog("close");
                                LoadList();
                            }
                            else {
                                $("#GroupAddDialog").html(result);
                            }
                        }
                    });
                }

И код контроллера:

if(Success)
{
     return Json(new
            {
               result = "success"
            });
}
ModelState.AddModelError("", "Unable to save in db");
return PartialView("_CreateGroup", model);
1 голос
/ 19 декабря 2011

Для отображения сообщений об ошибках, которые не относятся к конкретному заданному входу и которые были добавлены в состояние модели, вы можете использовать помощник ValidationSummary. Поэтому поместите следующее в частичное:

@Html.ValidationSummary(true)
...