ASp .Net MVC 3.0, Razor - проверка ввода из всплывающей формы - PullRequest
0 голосов
/ 14 июня 2011

У меня есть вид, из которого можно запустить модальное всплывающее окно для ввода данных:

<span class="AddLink ButtonLink">New Album</span>

<div id="AlbumDialog" title="" class="Hidden"></div>

<script type="text/javascript">
    $(function () {
        $("#AlbumDialog").dialog({
            autoOpen: false, width: 600, height: 400, modal: true,
            buttons: {
                "Save": function () {

                        //MAYBE DO VALIDATION HERE??? HOW TO CALL CONTROLLER?

                        $.post("/Music/CreateAlbum",
                                $("#_AlbumDialog").serialize(),
                                function (data) {   //OnSuccess
                                   $("#AlbumDialog").dialog("close");
                        });
                },
                Cancel: function () {
                    $(this).dialog("close"); 
                },
            }
        });

        $(".AddLink").click(function () {
            $("#AlbumDialog").html("")
                .dialog("option", "title", "Add Album")
                .load("/Music/CreateAlbum", function () { $("#AlbumDialog").dialog("open"); });
        });
    });
</script>

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

@model Models.ViewAlbum

<h2>Add Album</h2>

@using (Html.BeginForm("CreateAlbum", "Music", FormMethod.Post, new { id = "_AlbumDialog" }))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Fields</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Artist,"Artist Name")
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Artist)
            @Html.ValidationMessageFor(model => model.Artist)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Title, "Album Title")
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Title)
            @Html.ValidationMessageFor(model => model.Title)
        </div>
    </fieldset>
}

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

    [HttpPost]
    public ActionResult CreateAlbum(ViewAlbum album)
    {
            if (AlbumRepository.Exists(album)== false)
            {
                if (ModelState.IsValid)
                {
                    AlbumRepository.Save(album);

                    return RedirectToAction("ViewAlbums");
                }
                return PartialView("_AlbumDialog");   //HOW TO RETURN TO POPUP?
            }

            ModelState.AddModelError("Artist", "An identical album allready exist.");
            ModelState.AddModelError("Title", "An identical album allready exist.");

            return PartialView("_AlbumDialog");   //HOW TO RETURN TO POPUP?
    }

Пока все хорошо, НО это НЕ возвращает состояние всплывающему окну! : /

Вопросы:

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

Есть ли простой способ сделать это без написания целой связки jquery, так как я предпочитаю писать тестируемый C # (я не гроссмейстер jquery :)).

Примечание: Я прочитал много вещей в сети о том, как это сделать, но этот подход - самый плавный, который мне удалось найти. Я все еще думаю, что мне приходится писать много вопросов, но после нескольких часов серфинга мне пришлось начинать, если я не хотел умирать от разочарования :).

Надеюсь, кто-то там, в большом киберпространстве, может дать мне пару советов:).

С уважением.

1 Ответ

2 голосов
/ 14 июня 2011

Я прошлой ночью делал именно то, что ты хочешь делать. см. этот вопрос . У меня есть частичное представление, которое отображается в модальном диалоге. когда он действителен на стороне клиента (проверка mvc3), то я проверяю на стороне сервера. если все в порядке, я могу обновить страницу. если есть ошибки, я отображаю вид в модальном режиме.

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