.net 如何使用mvc将数据从一个动作传递到另一个动作,而不是在路由器中

oxf4rvwz  于 2022-12-01  发布在  .NET
关注(0)|答案(2)|浏览(84)

我在用户中有一个操作,我希望该操作将用户返回到另一个控制器中的另一个操作,而不是路由器参数中的另一个操作。下面是一个示例
第一个
Home索引没有使用传入的用户,因为它是作为路由器参数发送的,我认为

jjhzyzn0

jjhzyzn01#

欢迎使用stackoverflow!您可以使用TempData来实现这一点。

public IActionResult LoginCheck(UserForm user)
        {
            AuthUser auth = new AuthUser(_context);
           var result = auth.IsLoggedIn(user.Email, user.Password);
            if(result.isfound==false)
            {
                return NotFound();
            }
            result.User.IsAuth = true;
            TempData["user"] =  result.User;
            return RedirectToAction("Home","Index");
            

        }

然后你可以在另一个动作中得到它

public async Task<IActionResult> Index()
        {

              if(TempData["user"] == null)
            {
                return Unauthorized();
            }else{
             var someUser= (User)TempData["user"]; 
         }
}

但我不建议对敏感数据使用TempData。

x3naxklr

x3naxklr2#

您可以使用第二个动作作为方法

public async Task<IActionResult> LoginCheck(UserForm user)
        {
            AuthUser auth = new AuthUser(_context);
           var result = auth.IsLoggedIn(user.Email, user.Password);
            if(result.isfound==false)
            {
                return NotFound();
            }
            result.User.IsAuth = true;

            return await Index(result.User);
            

        }

第二动作

[NonAction] //  Indicates that a controller method is not an action method.
public async Task<IActionResult> Index(User user)
{

           if(user == null)
            {
                return Unauthorized();
            }
           else{
             var someUser= user; 
            }
}

使用重定向make browser来处理此传输,速度较慢。

相关问题