如何在Asp.Net MVC中访问View中的扩展属性?

时间:2013-07-05 19:55:53

标签: c# asp.net-mvc asp.net-mvc-4 forms-authentication simplemembership

我使用Forms身份验证和SimpleMembershipProvider进行MVC 4项目设置。在我的用户表中,我有一些其他属性,如电子邮件,名字,姓氏等

如何在Razor视图中访问当前登录用户的个人资料?

我已经尝试创建一个BaseController,然后让其他控制器继承它,就像这样。

   public class BaseController : Controller
    {
        public UserProfile CurrentUser;

        protected override void Initialize(RequestContext requestContext)
        {
            base.Initialize(requestContext);

            if (this.HttpContext.User.Identity.IsAuthenticated)
            {
                var context = new UsersContext();
                var user = context.UserProfiles.SingleOrDefault(u => u.UserName == WebSecurity.CurrentUserName);
                CurrentUser = user;
            }
        }
    }

然后在HtmlExtension方法中;

public static class HtmlExtensions
    {
        public static UserProfile CurrentUser(this HtmlHelper htmlHelper)
        {
            var controller = htmlHelper.ViewContext.Controller as BaseController;
            if (controller == null)
            {
                throw new Exception("The controller used to render this view doesn't inherit from BaseController");
            }
            return controller.CurrentUser;
        }
    }

但是,如果我尝试检索用户的属性,例如

,则不起作用
@Html.CurrentUser.Firstname

1 个答案:

答案 0 :(得分:0)

您必须在namespace - >上设置HtmlExtensions课程的system.web.webPages.razorpages - >在namespace文件夹内的web.config文件上的View上可以看到Views个标签,用于示例:

<system.web.webPages.razor>
    <!-- other tags -- >
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />
        <add namespace="System.Configuration" />
        <add namespace="MyWebApplication.Extensions"/> <!-- this is a custom namespace -->
      </namespaces>
    </pages>
  </system.web.webPages.razor>

我还建议您使用GlobalFilter来填充CurrentUser属性。