フォーム認証と 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