2016-06-01 3 views
0

Я хочу, чтобы направить пользователя на страницу своего профиля при их входе в систему, но returnUrl является null, я немного запутался о том, как returnUrl работает, если кто-то может направить меня в правильном направлении, высоко ценитсяreturnUrl - null?

Благодаря

Войти контроллер:

#region LoginAction 
    [AllowAnonymous] 
    public ActionResult Login(string returnUrl) 
    { 
     ViewBag.returnUrl = returnUrl; 
     return View(); 
    } 
    #endregion 

    #region LoginPost 
    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Login(LoginUserViewModel model,string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      User user = await UserManager.FindAsync(model.UserName, model.Password); 
      ProfileUserViewModel userProfile = new ProfileUserViewModel 
      { 
       UserName = user.UserName, 
       FirstName = user.FirstName, 
       LastName = user.LastName, 
       Weight = user.Weight, 
       Goal = user.Goal, 
       DailyCalories = user.DailyCalories, 
       DailyCarbs = user.DailyCarbs, 
       DailyFats = user.DailyFats, 
       DailyProtein = user.DailyProtein 

      }; 


      if (user == null) 
      { 
       ModelState.AddModelError("", "Invalid name or password"); 
      } 
      else 
      { 
       ClaimsIdentity ident = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); 
       AuthManager.SignOut(); 
       AuthManager.SignIn(new AuthenticationProperties { IsPersistent = false }, ident); 

       return Redirect(returnUrl); 

      } 

      // return View("Profile", userProfile); 
     } 
     ViewBag.returnUrl = returnUrl; 
     return View(model);   

    } 

    private IAuthenticationManager AuthManager 
    { 
     get { return HttpContext.GetOwinContext().Authentication; } 
    } 

    private AppUserManager UserManager 
    { 
     get 
     { 
      return HttpContext.GetOwinContext().GetUserManager<AppUserManager>(); 
     } 
    } 

    #endregion 

Вид:

@model FitnessFriend.WebUI.Models.LoginUserViewModel 
@{ 
    ViewBag.Title = "Login"; 
} 


<h2>Log In</h2> 
@Html.ValidationSummary() 

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken(); 

    <input type="hidden" name="returnUrl" value="@ViewBag.returnUrl" /> 

    <div class="form-group"> 
     <label>Name</label> 
     @Html.TextBoxFor(x => x.UserName, new { @class = "form-control" }) 
    </div> 

    <div class="form-group"> 
     <label>Password</label> 
     @Html.PasswordFor(x => x.Password, new { @class = "form-control" }) 
    </div> 

    <button class="btn btn-primary" type="submit">Log In</button> 

} 

ответ

0

Попробуйте Использование ниже перегрузки BeginForm:

 @using (Html.BeginForm("Login", "Account",new { returnUrl = ViewBag.returnUrl }, FormMethod.Post)) 
    { 
@Html.AntiForgeryToken(); 


    <div class="form-group"> 
     <label>Name</label> 
     @Html.TextBoxFor(x => x.UserName, new { @class = "form-control" }) 
    </div> 

    <div class="form-group"> 
     <label>Password</label> 
     @Html.PasswordFor(x => x.Password, new { @class = "form-control" }) 
    </div> 

    <button class="btn btn-primary" type="submit">Log In</button> 
} 
+0

Я перегрузил BeginForm, он говорит, что нет Логин/Войти, так что я изменил его на «Войти» «Счет», но та же проблема возникает снова ? –

+0

Какой у вас контроллер и название действия? Первый параметр в методе BeginForm - это имя действия, а второе - имя контроллера. –

+0

Account Controller, ActionResult: Login –

Смежные вопросы