身份用户登录后如何将模型数据传递给控制器​​?

时间:2019-07-06 21:28:42

标签: c# asp.net razor viewmodel core

我有一个带有Identity Razor页面支架的Asp.Net Core 2.2项目。用户登录尝试成功后,我需要将已登录的用户ID和电子邮件传递给重定向控制器。 Login.cshtml.cs OnPost方法返回LocalRedirect函数仅采用字符串参数,并且我不确定如何传递模型或值。

用户登录后,我将获得完整的用户对象,并且尝试使用ViewBag,ViewData和TempData将ID和电子邮件传递给家庭控制器。 ViewBag不属于Razor页面,使用ViewData和TempData时,在检查主控制器中设置的断点时,计数始终为0。我可以附加returnUrl以将id和email作为查询字符串包括进去,但这似乎是我走错了方向。

这是一个较大的场景的一部分,在这个场景中,我正在维护一个网站,该网站需要将基本模型属性传递给每个控制器。最终,我希望视图模型从基本视图模型继承,我将需要id和email(作为简化示例)值来执行操作。我在想一种最佳解决方案将允许我将通用模型传递给retrnUrl重新定向到的任何控制器。该项目是对Asp.Net MVC项目的增强升级,对我来说Asp.Net Core有点新。此时,我的主要重点是将参数从Login OnPost函数传递到重定向控制器,并采用最适合Asp.Net Core方法的正确编码礼节。

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
        {
            if (ModelState.IsValid)
            {
                var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
                if (result.Succeeded)
                {
                    _logger.LogInformation("User logged in.");
                    var user = await _userManager.FindByEmailAsync(Input.Email);
                    //ViewData["UserID"] = user.Id;
                    //TempData["UserID"] = user.Id;

                    //returnUrl += returnUrl + "?userId=" + user.Id;
                    return LocalRedirect(returnUrl);
                }               
            }


public HomeController(UserManager<ApplicationUser> userManager, IConfiguration configuration)
        {
            string id = ViewData["UserID"] != null ? ViewData["UserID"].ToString() : "";
            //string id2 = TempData["UserID"] != null ? TempData["UserID"].ToString() : "";
            _userManager = userManager;
            _configuration = configuration;
        }

除了不确定如何通过模型传递数据外,ViewData和TempData始终为空。我至少希望能够使用其中任何一个,但我认为在这里使用模型是正确的。有人可以建议正确的方法进行吗?

0 个答案:

没有答案