2012-05-06 13 views
0

ログイン後、ユーザーは要求されたURLに返されません。asp.net mvc 3カミソリログインビューで要求されたURLが返されない

これはコントローラある:

public ActionResult LogIn() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult LogIn(LoginModel model, string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      if (UserIsValid(model.Username, model.Password)) 
      { 
       if (model.RememberMe == false) 
       { 

       } 
       else 
       { 
        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, 
         model.Username, 
         DateTime.Now, 
         DateTime.Now.AddDays(15), 
         false, 
         "user", 
         FormsAuthentication.FormsCookiePath); 

        string HashedCoockies = FormsAuthentication.Encrypt(ticket); 
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashedCoockies); 
        Response.Cookies.Add(cookie); 

        if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") 
          && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) 
        { 
         return Redirect(returnUrl); 
        } 
        else 
        { 
         return RedirectToAction("Index", "Home"); 
        } 
       } 
      } 
      else 
      { 
       ModelState.AddModelError("", "The user name or password is incorrect."); 
      } 
     } 

     return View(model); 
    } 

ビュー:

@using (Html.BeginForm()) 
{ 
       <label for="username"> 
        Username:</label> 
       <br /> 
       @Html.TextBoxFor(model => model.Username) 
       <br /> 
       <br /> 
       <label for="password"> 
        Password:</label> 
       <p> 
        <a href="#">Forgot your password?</a></p> 
       @Html.PasswordFor(model => model.Password) 
       <br /> 
       <br /> 
       <div id="lower"> 
        <br /> 
        <br /> 
        @Html.CheckBoxFor(model => model.RememberMe, new { style = "margin-left: 10px; margin-top: 7px; position: absolute;" }) 
        <label for="check" id="keep" style="margin-left: 30px; margin-top: -14px;"> 
         Keep me logged in</label> 
        <input type="submit" value="Login" class="round-button" style="float: right; margin-right: 20px;" /> 
       </div> 
} 

のweb.config

<authentication mode="Forms"> 
    <forms loginUrl="~/account/login" timeout="2880" /> 
</authentication> 

P 。私のlogin.cshtmlには_Layout.htmlがありません

+0

の妥当性は、何を意味「ログインビューには、要求されたURLを上の返却しない」のでしょうか?あなたはログインページにいますか?ログイン後のブラウザのURLは何ですか? 'return Redirect(returnUrl);'行にブレークポイントを設定しましたか?ヒットし、 'returnUrl'に正しい値が入っていますか? – nemesv

+0

returnUrlは常にnullです。 –

答えて

1

returnUrlはnullでもかまいません。 URLはこの形式で

http://localhost:56457/Account/LogIn?returnUrl=whatever_return_url

あるときに(前のアクセスに認証が必要)whatever_return_urlにアクセスしようとしたときにreturnurlは、それがにreturnurlでログインページにリダイレクトする値を持つことになります意味(追加あなたは以前にログインしていません)

これは、ログインが成功した場合は、whatever_return_urlが必要であることを意味します。 returnUrlが指定されていない場合(returnUrlがnullの場合)、ログイン後に 'Home'コントローラの 'Index'アクションに移動します。

http://localhost:56457/Home/Index

チェックは徹底的にあなたのコントローラ、アクション名とURL

関連する問題