2017-03-09 81 views
0

在用戶成功登錄後,我希望頁面根據用戶角色重定向到合適的頁面。我有一些代碼工作,它允許我從登錄憑證中檢索和檢查用戶角色,但switch語句不允許我使用if-else語句。根據返回的switch語句中的用戶角色返回RedirectToAction()Views()的

它希望我返回一個View(),但我總是重定向到Home/Index視圖。這裏是我的代碼:

 switch (result) 
     { 

      case SignInStatus.Success: 
       MigrateShoppingCart(model.Email); 
       //returnURL needs to be decoded 
       string decodedUrl = ""; 
       if (!string.IsNullOrEmpty(returnUrl)) 
        decodedUrl = Server.UrlDecode(returnUrl); 

       if (Url.IsLocalUrl(decodedUrl)) 
       { 
        return Redirect(decodedUrl); 
       } 

       string id = UserManager.FindByEmail(model.Email).Id; 
       IList<string> roleNames = UserManager.GetRoles(id); 

       if (roleNames.Contains("Admin")) 
       { 
        RedirectToAction("Index", "Category"); 
       } 
       else 
       { 
        return RedirectToAction("Index", "Home"); 
       } 
       return View(); 
      case SignInStatus.LockedOut: 
       return View("Lockout"); 
      case SignInStatus.RequiresVerification: 
       return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); 
      case SignInStatus.Failure: 
      default: 
       ModelState.AddModelError("", "Invalid login attempt."); 
       return View(model); 
     } 
+1

錯誤信息是什麼? –

+0

即使用戶具有「管理員」角色,我也總是被重定向到「家庭/索引」視圖。 – naz786

+1

如果之前可以共享角色名稱的值嗎? –

回答

0

它在我的代碼是一個小錯誤,因爲我並沒有在第一,如果情況使用return字。更改此代碼:

if (roleNames.Contains("Admin")) 
{ 
    RedirectToAction("Index", "Category"); 
} 
else 
{ 
    return RedirectToAction("Index", "Home"); 
} 
return View(); 
case SignInStatus.LockedOut: 
return View("Lockout"); 

要這樣:

if (roleNames.Contains("Admin")) 
{ 
    return RedirectToAction("Index", "Category"); 
} 
else 
{ 
    return RedirectToAction("Index", "Home"); 
} 

case SignInStatus.LockedOut: 
return View("Lockout"); 

通知我也能夠去除return view()代碼。