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