カスタムのモデルバインダーがあり、認証クッキーをチェックして値を返します。
public class UserDataModelBinder<T> : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (controllerContext.RequestContext.HttpContext.Request.IsAuthenticated)
{
var cookie =
controllerContext.RequestContext.HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie == null)
return null;
var decrypted = FormsAuthentication.Decrypt(cookie.Value);
if (!string.IsNullOrWhiteSpace(decrypted.UserData))
return JsonSerializer.DeserializeFromString<T>(decrypted.UserData);
}
return null;
}
}
使用する必要がある場合は、それをアクションに渡すだけです。すべてが機能します。
public ActionResult Index(UserData userData)
{
AccountLoginWidgetVM model = new AccountLoginWidgetVM();
if (null != userData)
model.UserData = userData;
return View(userData);
}
ただし、ユーザーがログインしたら、すべてのページの上部に情報を表示したいので、マスターページで使用したいと思います。私はいくつかのことを試しましたが、うまくいきませんでした
@Html.RenderPartial("LoginPartial", ???model here??)