0

そのため、作成した 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 &copy @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 になります。考え?

4

2 に答える 2

1

の 2 番目のパラメーターとして Model を渡す必要があります@Html.Partial("_Scripts", Model)

于 2013-02-03T22:25:19.890 に答える
0

大げさな推測をしなければならないとしたら、_Scripts パーシャルの内容に問題があると思います。モデル @krillgar が必要かもしれませんが、それはないと思います。_Scripts パーシャルをパーシャルではなく、通常のようにヘッダーでスクリプトを参照するように移動することをお勧めします。この例外は、その顔を早く見せて問題を見つけるのに役立つと思います。Model が null になる理由は、例外の種類によるものです。したがって、_Scripts パーシャルを移動して以前に null を指定した場合、ここが注目すべき場所であることがわかります。

于 2013-02-03T23:16:45.170 に答える