MVC3 @Model在布局中变为null

时间:2013-02-03 22:22:03

标签: asp.net asp.net-mvc-3 layout model null

所以我在创建的MVC3布局中发生了一些奇怪的事情。它强烈地键入BaseVM。每个View模型都继承自BaseVM。当我调试并逐步执行代码并逐步完成我的布局时,BaseVM模型不是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并且model不为null。然后它退回到@RenderSection(从视图中呈现一些脚本),然后抛出异常并且@Model为null。想法?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果我不得不猜测,我认为_Scripts部分内容存在问题。也许它需要模型@krillgar,但我的猜测就是没有。我建议将_Scripts部分移动到不是部分的,并像正常一样引用标题中的脚本。我怀疑这个异常会更早地显示它的面并帮助你找到问题,并且Model变为null的原因是因为异常的类型。因此,如果您将_Scripts部分移动并且之前为空,则您知道这是要查看的位置。