2017-03-09 6 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

ユーザが "Admin"ロールを持っていても、私はいつも 'Home/Index'ビューにリダイレクトされます。 – naz786

+1

もしあなたが前にrolenames値を共有することはできますか? –

答えて

0

私は最初のif-場合にreturn単語を使用していないので、それは私のコード内の小さな誤りでした。これに

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

::私もreturn view()コードを削除することができた

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

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

お知らせこのコードを変更します。

関連する問題