Ajax. BeginForm - отображающиеся ошибки проверки

Я использовал FDT для нескольких небольших приложений. Существует много общих borkyness, но насколько я могу определить, большая часть из него, основы от того, что API Facebook являются перемещением высокой скорости, предназначаются и плохо документируются (это было особенно верно вокруг введения нового дизайна профиля). Я не думаю, что нужно дать сбой разработчики FDT из-за отсутствия compatitability, когда это, вероятно, главным образом должно добавить retirering в список контактов Facebook или изменяющий базовые функции.

(я не аффилирован с FDT, хотя я предложил несколько патчей).

9
задан Pete 3 June 2013 в 12:56
поделиться

1 ответ

Для успешного применения отправки формы ajax вам необходимо изменить регистр действие и взгляды. По умолчанию в случае ошибки это действие просто возвращает ассоциированное представление register.aspx. Первым шагом будет размещение сводки валидации в частичном пользовательском элементе управления:

ValidationSummary.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%= Html.ValidationSummary("Account creation was unsuccessful. Please correct the errors and try again.") %>

Затем вы включаете этот фрагмент в представление Register.aspx:

<div id="validationSummary">
    <% Html.RenderPartial("ValidationSummary"); %>
</div>

<% using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "validationSummary" })) { %>
    FORM CODE HERE
<% } %>

И, наконец, вы изменяете действие «Регистрация»:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(string userName, string email, string password, string confirmPassword)
{
    // ... skipped content for clarity

    // If we got this far, something failed, redisplay form
    if (Request.IsAjaxRequest())
    {
        // If an ajax request was made return only the validation errors 
        // instead of the whole page
        return PartialView("ValidationSummary");
    }
    else
    {
        return View();
    }
}

В случае успешной регистрации по умолчанию действие «Зарегистрировать» просто перенаправляет на Home / Index. Вам также придется изменить этот бит, потому что, когда вы выполняете запрос ajax, перенаправление не будет работать. Таким же образом вы можете проверить, вызываете ли вы действие асинхронно, и вернуть текст, который укажет, что регистрация прошла успешно. Этот текст будет отображаться внутри того же div , что и ошибки проверки.


ОБНОВЛЕНИЕ:

Последний вопрос - вместо список сообщений об ошибках, как сделать Я получаю сообщение об ошибке каждого элемента управления на рендерить рядом с элементом управления с помощью Html.ValidationMessage ("....") метод ?

Для этого вам нужно поместить содержимое вашей формы в частичное представление:

<% using (Ajax.BeginForm(
    "register", 
    null, 
    new AjaxOptions { 
        HttpMethod = "POST", 
        UpdateTargetId = "myForm" 
    }, 
    new { 
        id = "myForm" 
    })) { %>
     <% Html.RenderPartial("RegisterForm"); %>
<% } %>

И в действии регистрации отобразить правильный фрагмент:

if (Request.IsAjaxRequest())
{
    return PartialView("RegisterForm");
}
else
{
    return View();
}
14
ответ дан 4 December 2019 в 14:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: