1

フォーム認証と SimpleMembershipProvider を使用して MVC 4 プロジェクトをセットアップしています。私の users テーブルには、Email、Firstname、Lastname などの他のプロパティがあります。

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
4

1 に答える 1

0

サンプルとして、フォルダ内の web.config ファイルで、ビューで使用できるように-> ->タグでクラスのを設定する必要がnamespaceあります。HtmlExtensionssystem.web.webPages.razorpagesnamespaceViews

<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 プロパティを埋めることもお勧めします。

于 2013-07-05T20:31:41.540 に答える