ASP.NET MVC3 Html.Action, содержащий форму

У меня есть модуль на моей странице, который содержит форму.

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

@Html.Action("Pod","Home")

Существует некоторая проверка бизнес-правил в действии HttpPost модуля, которое обрабатывает публикацию формы. Если это бизнес-правило не выполняется, я добавляю ошибку в состояние модели.

Проблема в том, что когда бизнес-правило не проходит проверку. Я возвращаю действие View from the pod, которое показывает только pod на пустой странице.

Как я могу правильно повторно использовать форму, подобную этой, и при этом иметь проверку этого бизнес-правила на стороне сервера (для проверки требуется попадание в БД)?


person Rob Stevenson-Leggett    schedule 06.05.2011    source источник
comment
Мы уже на MVC3? Где, черт возьми, я был? Ой. подождите, работаю над устаревшим классическим сайтом ASP.   -  person Doug Chamberlain    schedule 06.05.2011


Ответы (1)


Одна из возможностей - AJAXify форма в партиале Pod:

<div id="pod">
    @Html.Action("Pod","Home")
</div>

и внутри Pod.cshtml:

@using (Html.BeginForm("Pod", "Home", FormMethod.Post, new { id = "podForm" }))
{
    ...
}

наконец, AJAXify это:

$(function() {
    $('#podForm').submit(function() {
        $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            success: function(result) {
                $('#pod').html(result);
            }
        });
    });
});

Последнее, что нужно сделать, это убедиться, что действие POST возвращает Pod.cshtml как частичное представление. Две возможности:

[HttpPost]
public ActionResult Pod(PodViewModel model)
{
    if (!ModelState.IsValid)
    {
        return PartialView(model);
    }
    ...
}

или в части Pod.cshtml:

@{
    Layout = null;
}
person Darin Dimitrov    schedule 07.05.2011
comment
Хорошо, но вам нужно добавить return false; к вашему коду javascript после вызова ajax. - person Roman Pushkin; 23.11.2012