2010-11-27 2 views
0

私は、(jquery simplemodalを使用して)モーダルダイアログにログインビューを表示しています。ユーザーがログインに失敗すると、正常に動作します。エラーはモーダルに戻ります。問題は、ユーザーが正常にログインしたときです - ページがリダイレクトされてモーダルが消えてしまいますが、モーダルがページ全体で更新されるようになりました:(ASP.NET MVCログインモーダルの問題 - リダイレクトがモーダルになりますか?

モーダルが正しく見えるようにもしログインのソースがAjaxならAccountControllerを見てください。もしそうなら、部分的なビューを返します(モーダルで表示する)。そうでなければ、フル・ビューを返します(ユーザがウェブサイトの外部からページにアクセスしようとする場合)私のログオンユーザーコントロール(Site.Masterで1つのザッツ)で

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(); 
    } 

ログインリンクが

をクリックされたとき、私はJavaScriptからログオンするためのスクリプトを追加しました

部分ビュー(つまり、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であるということである - ですユーザーがログインに失敗したときに何をしたいのですか?login.iが正常にページを更新したいとき - しかし、私がこれをしない限り、AccountController.LogOnのajaxログインと通常ログインを区別できません:P

何か案は?これが意味をなさないことを願っています - ありがとう

そのようなIMはどちらかの方法でねじ込まれます。

答えて

2

いつもhtmlを成功のjavascriptコールバックに戻すのではなく、return RedirectToActionまたはreturn Redirectのどこにでもjsonを返すことをお勧めします。

if (Request.IsAjaxRequest()) 
    return Json(new {Url = returnUrl}); 
else 
    return Redirect(returnUrl); 

またはJavaScript側では

if (Request.IsAjaxRequest()) 
    return Json(new {Url = Url.Action("Index", "Home")}); 
else 
    return RedirectToAction("Index", "Home"); 

は偶然ダイアログに表示されている場合、 "抜け出す" 必要があるページに配置する

success: function (result) { 
    if(typeof result === 'string'){ 
     $.modal(result, { 
      closeHTML: "", 
      containerId: "login-container",  
      overlayClose: true 
     }); 
    } 
    else if (result.Url){ 
     location.href = result.Url; 
    } 
} 
0

いくつかの簡単なjQueryのような何か:

<script type="text/javascript"> 

$(function() { 

    if ($('title').length > 1) { 
     location = '<%: Request.RawUrl %>'; 
    } 
}); 

</script> 
関連する問題