Перехватить частичное представление ajax с помощью jQuery в форме MVC 3 - PullRequest
0 голосов
/ 12 июля 2011

Я использую форму ajax в MVC 3. Это мое представление:

<div id="form_container"> 
    @{ Html.RenderPartial("_FormPartial"); }
</div>

Это частичное представление формы:

using (Ajax.BeginForm("Register", "Account", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "form_container", LoadingElementId = "loading", OnBegin = "animate" }))
{...code...}

Мое действие "Зарегистрировать" на моемКонтроллер «Account» возвращает тот же частичный просмотр при возникновении ошибки.Но когда форма отправлена ​​правильно, я заменяю частичное представление формы другим частичным представлением, например так:

<h1>Success!<h1>

Я хочу, чтобы <h1> был перехвачен jQuery и отображен с fadeIn().document.ready() не работает, как и свойства OnCompleted / OnSuccess формы ajax, так как ее частичное представление больше не существует.

Каков наилучший способ достижения этого?

1 Ответ

1 голос
/ 12 июля 2011

Почему вы не можете использовать обратный вызов OnSuccess, например:

@using (Ajax.BeginForm(
    "Register", 
    "Account", 
    new AjaxOptions { 
        HttpMethod = "POST", 
        LoadingElementId = "loading", 
        OnBegin = "animate", 
        OnSuccess = "success" 
    }
))
{
    ...
}

и ваш успешный обратный вызов:

function success(result) {
    // Because I have removed the UpdateTargetId property from the AjaxOptions
    // we have to manually inject the resulting partial HTML into the DOM

    var success = $('<div/>').html(result).find('h1').length > 1;
    if (success) {
        // TODO: do some fancy effect such as fadeIn
        // I really suck at this effects part, so there's
        // probably a better way to do this
        $('#form_container').html(result).hide().fadeIn(2000);
    } else {
        $('#form_container').html(result);
    }
}
...