ビューに特定のオブジェクトまたはオブジェクトのコレクションに関するデータを表示する必要があるときはいつでも、厳密に型指定されたビューを使用します。
あなたのビューは純粋に情報であれば、あなたは情報の小さなビットを渡すためにModelStateを使用することができる(例えば:成功/エラーページ、メッセージの権限がない、等)私のアプリケーションでは
、I強く型付けされたすべてのビューを持っているので、ユーザーのログイン情報をマスターページに簡単に渡すことができます。つまり、私のすべてのビューは強く型付けされ、テンプレート化され、サイト構成とユーザー・ログイン情報を含む基本クラスに制約されます。そのための
、私はこれを行うことができます。マスターページはONLYモデルに移入された内容に基づいてテーマにしているので、ビュー自体がデータベースにヒットをトリガーすることはありません、
public class MyBaseMasterPage : ViewMasterPage<MyBaseModel>
{
public string CurrentTheme
{
get
{
if (this.Model.CurrentUser != null)
return this.Model.CurrentUser.Theme;
else return this.Model.Config.DefaultTheme;
}
}
public User CurrentUser { get { return this.Model.CurrentUser; } }
public ConfigurationRepository Config { get { return this.Model.Config; } }
}
注意を/キャッシュ。
MyBaseModelはそうのように構成されています
public class MyBaseModel
{
private MyBaseModel() { }
public MyBaseModel(MyBaseController controller)
{
this.CurrentUser = controller.CurrentUser;
this.Config = controller.Config;
}
public User CurrentUser { get; private set; }
public ConfigurationRepository Config { get; private set; }
}
プライベートコンストラクタはsoruceコントローラでモデルを初期化するために、私のモデルのすべてのサブクラスを強制します。
コントローラー基本クラスは、ユーザーをセッションから解放し、キャッシュから構成を取り消します。
このように、私のすべてのビューは、DBにヒットすることなく、ユーザーと設定データにアクセスできます。 MyBaseControllerで今
、:
public class LanLordzBaseController : Controller
{
[Obsolete]
protected new ViewResult View(string viewName, object model)
{
if (model == null)
{
throw new ArgumentNullException("model");
}
if (!(model is MyBaseModel))
{
throw new ArgumentException("The model you passed is not a valid model.", "model");
}
return base.View(viewName, model);
}
protected ViewResult View(string viewName, MyBaseModelmodel)
{
if (model == null)
{
throw new ArgumentNullException("model");
}
return base.View(viewName, (object)model);
}
public ConfigurationRepository Config { get { ... } }
public User CurrentUser { get { ... } }
}
これは私が適切な基本クラスから継承されていなかったビューを返した私のコントローラのすべてを見つける助けました。
まさに!同意する。 –