所以我在创建的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 © @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。想法?
答案 0 :(得分:1)
您需要将Model作为@Html.Partial("_Scripts", Model)
中的第二个参数传递。
答案 1 :(得分:0)
如果我不得不猜测,我认为_Scripts部分内容存在问题。也许它需要模型@krillgar,但我的猜测就是没有。我建议将_Scripts部分移动到不是部分的,并像正常一样引用标题中的脚本。我怀疑这个异常会更早地显示它的面并帮助你找到问题,并且Model变为null的原因是因为异常的类型。因此,如果您将_Scripts部分移动并且之前为空,则您知道这是要查看的位置。