0

所以我在创建的 MVC3 布局中发生了一些奇怪的事情。它是 BaseVM 的强类型。每个 View 模型都继承自 BaseVM。当我调试并单步执行代码并单步执行我的布局时,BaseVM 模型不为空,它调用一个方法来获取页脚中版权的当前年份。但是,一旦我走到布局的底部,它就会在我调用属性以获取年份的地方抛出异常,突然模型为空。现在这不会导致应用程序显示错误屏幕或消息,但每次加载页面时都会记录此异常。这是一个代码示例:

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 并且模型不为空。然后它降级到@RenderSection(从视图中渲染一些脚本),然后抛出异常并且@Model 为空。想法?

4

2 回答 2

1

您需要将 Model 作为第二个参数传递给@Html.Partial("_Scripts", Model).

于 2013-02-03T22:25:19.890 回答
0

如果我不得不大胆猜测,我认为 _Scripts 部分的内容有问题。也许它需要模型@krillgar,但我猜不会。我建议将 _Scripts 部分移动到 NOT 部分,并像往常一样引用标题中的脚本。我怀疑这个异常会更早地出现并帮助您找到问题,而模型变为空的原因是因为异常的类型。因此,如果您移动 _Scripts 部分并更早地设置为 null,您就知道这是要查看的地方。

于 2013-02-03T23:16:45.170 回答