【问题标题】:Pass AD username into view in MVC将 AD 用户名传递到 MVC 中的视图中
【发布时间】:2014-09-24 16:19:52
【问题描述】:

我可以使用 System.DirectoryServices.ActiveDirectory 从 AD 获取用户信息。

我还可以获取没有域的用户名,如下所示。我的问题是如何将这些信息传递给我的视图?

 DirectoryContextMock directorycontent = new DirectoryContextMock();

 System.Security.Principal.IPrincipal user = System.Web.HttpContext.Current.User;
 System.Security.Principal.IIdentity identity = user.Identity;
 string a= identity.Name.Substring(identity.Name.IndexOf(@"\") + 1);

目前我的视图中有以下代码,它可以工作,但我想将“a”传递到此视图中,而不是 @User.Identity.Name。这似乎很容易做到,但我做不到。

Hello, <span class="username">@User.Identity.Name</span>!

【问题讨论】:

  • 您实际上在哪里定义a?如果它是模型的一部分、某些视图数据的一部分(ViewBagTempData 等)、某处的静态属性等,您可以查看它。
  • 我在我的控制器中定义它。
  • 我不明白这个问题。 MVC 中的视图派生自已包含属性 IPrincipal UserWebViewPage。那么为什么要复制已有的东西呢?

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


【解决方案1】:

在上面的 cmets 中,您说 a 正在您的控制器中定义。因此,您有几个非常简单的选项可以将该数据发送到您的视图:

1) 在模型上创建一个属性并将a 的值存储在该属性上。

2) 将其添加到ViewBag,例如:

// in the controller action
ViewBag.Username = a;

// in the view
@ViewBag.Username

您也可以使用类似于ViewBag 的其他临时存储机制,例如TempDataViewData。 (ViewDataViewBag 的用途非常相似,后者在以后的版本中被添加到框架中。)

【讨论】:

    【解决方案2】:

    只需将一个属性添加到您要传递到视图中的模型中。

    如果您不使用模型,则可以使用 ViewBag 动态属性。

       public class MyModel
        {
           public string Identity {get;set;}
        }
    
        public class MyController : BaseController
        {
    
            public ActionResult Get()
            {
               var myModel = new MyModel();
               myModel.Identity = System.Web.HttpContext.Current.User.Identity.Name;
    
               //snip
               return View(myModel);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多