У меня есть вид входа в систему, который отображается в модальном диалоговом окне (с использованием jquery simplemodal), и когда пользователь не может войти в систему - он работает нормально - ошибка возвращается к модальному. Проблема заключается в том, что когда пользователь успешно входит в систему - предполагается, что страница перенаправлена, и модальное сообщение исчезает, но теперь модальное обновление обновляется на всю страницу :(
Чтобы модал выглядел правильно - я проверяю, чтобы увидеть в AccountController, если источником входа был Ajax, если так - вернуть частичное представление (для отображения в модале), если нет, вернуть полное представление ( в случае, если пользователь пытается получить доступ к странице за пределами сайта)
public ActionResult LogOn()
{
if (Request.IsAjaxRequest())
{
return PartialView("_LogOn");
}
return View();
}
[HttpPost]
public ActionResult LogOn(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
if (Request.IsAjaxRequest())
{
return PartialView("_LogOn");
}
return View();
}
В моем Logon UserControl (тот, который есть в Site.Master) я добавил скрипт для входа из javascript при нажатии на ссылку входа в систему
<script type="text/javascript">
function openModel() {
$.ajax({
type: "get",
url: '/Account/LogOn',
dataType: "html",
contentType: "application/x-www-form-urlencoded;charset=utf-8",
// async: true,
success: function (result) {
$.modal(result, {
closeHTML: "",
containerId: "login-container",
overlayClose: true
});
}
});
}
</script>
Хотя частичное представление (возвращаемое при вызове Ajax) выглядит так:
<% using (Ajax.BeginForm("LogOn", "Account", new AjaxOptions{UpdateTargetId = "logonForm"})) { %>
<div id="logonForm">
<%: Html.ValidationSummary(true, "Login was unsuccessful. Please review and try again.") %>
<p>Please enter your username and password.
</p>
<p>
<input id="submit" type="submit" value="Log In" />
</p>
</div>
<%}%>
Так что проблема в том, что AjaxOptions UpdateTargetId - это logonForm - это то, что я хочу, когда пользователь не может войти в систему, но когда успешный вход в систему ... я хочу, чтобы он обновлял страницу в обычном режиме, - но я не могу различить вход в систему ajax и обычный вход в AccountController.LogOn, если я не сделаю это: P
Есть идеи? Надеюсь, что это имеет смысл - спасибо
Это похоже на то, что я облажался в любом случае.