Сценарий:
Я создаю форму входа для приложения MVC2.
Как я это делаю :
Форма отправляется в действие MVC2, которое проверяет имя пользователя / пароль. Если проверка не пройдена, действие возвращает форму (частичное представление), чтобы пользователь мог повторить попытку. Если он проходит проверку, действие возвращает страницу, которую посетил пользователь до того, как он вошел в систему (представление).
Что я хочу, чтобы произошло:
1 - когда форма отправлена и пользователь успешно подтвердил, возвращаемый результат должен заменить текущую страницу (как, например, если вы не установите UpdateTargetId).
2 - Когда форма отправляется и пользователь не проходит проверку, возвращаемый результат должен заменить форму (как, например, если вы установите UpdateTargetID для элемента, содержащего форму).
Проблема:
Я могу заставить обе эти вещи работать, но не одновременно. Я могу либо сделать так, чтобы он всегда заменял текущую страницу, либо всегда просто заменять содержимое элемента UpdateTargetId. Но мне нужно, чтобы это можно было сделать в зависимости от того, успешно ли пользователь прошел валидацию или нет.
Что мне нужно
Идеальным решением было бы иметь возможность проверить результат запроса ajax и определить, использовать ли UpdateTargetId (заменяя только форму) или нет (заменяя всю страницу). Я ожидаю, что это потребует некоторой работы с jquery (при условии, что это возможно), но я не очень хорош в jquery, чтобы понять, как сделать это самому. Если это невозможно сделать таким образом, я также открыт для других методов / решений, чтобы заставить его работать аналогичным образом.
Заранее спасибо ..
По запросу. Код для акции. Но, как я уже сказал. Это стандартное действие LogOn, которое поставляется по умолчанию с каждым приложением MVC. Единственное отличие состоит в том, что он возвращает частичное представление при сбое проверки.
[HttpPost]
[MedLife.Code.Compression.CompressFilter]
public ActionResult SignIn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
FormsService.SignIn(model.UserName, model.RememberMe);
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return PartialView("Overlays/LoginControl", model);
}