私は関連する質問をしていましたが、タイトルを台無しにして、誰もそれを理解しませんでした。より正確に質問できるようになったので、新しい質問に再定式化し、古い質問を閉じることにしました。そのために残念。
したがって、私がやりたいのは、データ(データベースに格納されているカスタムユーザーのニックネーム)をLoginUserControlに渡すことです。このログインはマスターページからHtml.RenderPartial()を介してレンダリングされるため、実際に行う必要があるのは、すべての呼び出しにViewData["UserNickname"]が存在することを確認することです。しかし、すべてのコントローラーのすべてのアクションにViewData ["UserNickname"]を設定したくないので、このアプローチを使用して、次のように作業を行う抽象ベースコントローラーを作成することにしました。
public abstract class ApplicationController : Controller
{
private IUserRepository _repUser;
public ApplicationController()
{
_repUser = RepositoryFactory.getUserRepository();
var loggedInUser = _repUser.FindById(User.Identity.Name); //Problem!
ViewData["LoggedInUser"] = loggedInUser;
}
}
このように、私の派生コントローラーが何をするにしても、ユーザー情報はすでに存在します。
ここまでは順調ですね。今問題のために:
User
はすでにnullであるため、User.Identity.Nameを呼び出すことができません。これは私の派生コントローラーのすべてに当てはまるわけではないので、これは抽象ベースコントローラーに固有です。
コード内の別の場所でFormsAuthenticationを介してUser.Identity.Nameを設定していますが、これは問題ではないと思います。afaikUser.Identity.Nameはnullにすることができますが、User自体はできません。
HttpContextが利用できないように見え(null;-もあるため)、ここで単純でありながら重要なポイントが欠落しているように見えます。誰かが私にいくつかのヒントを与えることができますか?とても感謝しております。