【问题标题】:ASP.NET MVC Controller to View Passing dataASP.NET MVC 控制器查看传递数据
【发布时间】:2017-09-08 15:25:58
【问题描述】:

我开始学习 ASP.NET,但我仍然不完全熟悉它。 我需要将 Account Controller 数据传递到我的主索引视图。 我正在操纵默认身份验证。我使用迁移在 ASPNETUSERS 表中添加了一个新列(性别)。我需要获取当前登录用户详细信息并将其显示到我的Index 视图中的HomeController

我已经使用AccountController 中的以下代码进行了过滤。

var currentUserId = User.Identity.GetUserId();
var x = UserManager.FindById(currentUserId);
ViewBag.Gender = x.Gender;

我认为此代码可以过滤登录用户 ID 的特定列。 我想错了吗?如果我错了,请解释一下。

我现在面临的主要问题是将这个@ViewBag.Gender 传递给Index 视图。是否可以在HomeControllerIndex 视图中使用@ViewBag.Gender? 我的理解是ViewBag 必须在HomeController 中定义才能通过HomeControllerIndex 查看页面。

我如何将AccountController 数据传递给HomeControllerIndex 视图? 我不是指使用ViewBag。只要它通过了价值,我就很高兴。 请给我一些建议以完美地做到这一点。

【问题讨论】:

  • 不,您不能使用ViewBag 将数据从一个控制器传递到另一个控制器(尽管您可以使用TempData。您应该只是在@ 的Index() 方法中使用上面的代码sn-p 987654341@
  • 也许您需要将数据持久化到数据库或缓存中。
  • ViewBag 用于将控制器数据传递到视图中。您可以改用TempDataSession 在控制器之间传递。 @ViewBag.Gender 也应该在 HomeController.Index() 方法中使用。
  • @Stephen Muecke,我也试过了,实际上 UserManager 类位于 AccountController 中。因此,该代码不能在 AccountController 之外工作。您可以选择任何不同的方法从用户表中获取过滤数据吗?
  • 你是什么意思它不能在AccountController之外工作(当然可以)

标签: c# asp.net asp.net-mvc


【解决方案1】:

我实际上从另一个问题区域找到了答案。 get current user email in Identity

ApplicationUser x = System.Web.HttpContext.Current.GetOwinContext()
   .GetUserManager<ApplicationUserManager>()
   .FindById(System.Web.HttpContext.Current.User.Identity.GetUserId());

ViewBag.Gender = x.Gender;

我可以在我的HomeController 中使用它并将ViewBag 传递给HomeControllerIndex,使用@ViewBag.Gender

要在没有任何错误的情况下使用此代码,我必须使用引用在下面插入

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using ProjectName.Models;

感谢您的建议

【讨论】:

    【解决方案2】:

    在 AccountController 中使用 TempData["gender"] 并重定向到 HomeController。 在 HomeController 中获取 ViewBag 中的数据并在 View 上使用它。

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多