У меня есть представление входа в систему, отображаемое в модальном диалоговом окне (с использованием 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
Любые идеи? Надеюсь, это имеет смысл - спасибо
Как будто я облажался в любом случае.