そのため、作成した MVC3 レイアウトで奇妙なことが起こっています。BaseVM に強く型付けされています。すべての View モデルは BaseVM から継承します。コードをデバッグしてステップ実行し、レイアウトをステップ実行すると、BaseVM モデルは null ではなく、フッターの著作権の現在の年を取得するメソッドが呼び出されます。しかし、レイアウトの一番下に進むとすぐに、年を取得するためにプロパティを呼び出していたところに例外がスローされ、突然モデルが null になります。これにより、アプリケーションがエラー画面やメッセージを表示することはなくなりましたが、ページが読み込まれるたびにこの例外がログに記録されます。コードサンプルは次のとおりです。
public class BaseVM
{
public string CurrentYear
{
get
{
return DateTime.Today.Year.ToString();
}
}
public BaseVM()
{
}
}
public class PrelaunchReserveVM : BaseVM
{
public PrelaunchDTO Prelaunch { get; set; }
public PrelaunchReserveVM()
: this(new PrelaunchDTO()) { }
public PrelaunchReserveVM(PrelaunchDTO prelaunch)
: base()
{
this.Prelaunch = prelaunch;
}
}
コントローラーのアクション:
public ActionResult Reserve()
{
return View("Reserve", new PrelaunchReserveVM(new PrelaunchDTO()));
}
レイアウト:
@model StickyThink.Models.VM.BaseVM
...
<div id="container">
<div id="main" role="main" style="padding: 0px; margin: 0px;">
@RenderBody()
</div>
</div>
<footer>
<div id="FooterPageContainer" class="center">
Copyright © @Model.CurrentYear ... All rights reserved.
</div>
</footer>
<!-- END: Add your site or application content here -->
@Html.Partial("_Scripts")
@RenderSection("scripts", false);
したがって、@Model.CurrentYear に入り、モデルは null ではありません。次に、@RenderSection (ビューからいくつかのスクリプトをレンダリングするため) にステップダウンし、例外がスローされ、@Model が null になります。考え?