Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net MVC3@Model在布局中变为空_Asp.net_Asp.net Mvc 3_Layout_Model_Null - Fatal编程技术网

Asp.net MVC3@Model在布局中变为空

Asp.net MVC3@Model在布局中变为空,asp.net,asp.net-mvc-3,layout,model,null,Asp.net,Asp.net Mvc 3,Layout,Model,Null,所以在我创建的MVC3布局中发生了一些奇怪的事情。它是BaseVM的强类型。每个视图模型都继承自BaseVM。当我调试并逐步执行代码并逐步执行布局时,BaseVM模型不为null,它调用一个方法来获取页脚中版权的当前年份。但是,当我一踏入布局的底部,它就会抛出一个异常,返回到我调用属性获取年份的位置,突然模型为空。现在,这不会导致应用程序显示错误屏幕或消息,但每次加载页面时都会记录此异常。下面是一个代码示例: public class BaseVM { public string Cur

所以在我创建的MVC3布局中发生了一些奇怪的事情。它是BaseVM的强类型。每个视图模型都继承自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
...


@RenderBody()
版权所有并复制@Model.CurrentYear。。。版权所有。
@Html.Partial(“\u脚本”)
@渲染部分(“脚本”,false);


因此,它进入@Model.CurrentYear,并且Model不为空。然后转到@RenderSection(从视图中呈现一些脚本),然后抛出异常,@Model为null。想法?

您需要将Model作为
@Html.Partial(“\u Scripts”,Model)”中的第二个参数传递。
如果我不得不胡乱猜测的话,我认为部分\u Scripts的内容有问题。也许它需要@krillgar模型,但我猜这是不可能的。我建议将_脚本部分移动到非部分,并像正常情况一样引用标题中的脚本。我怀疑这个异常会更早地出现并帮助您发现问题,模型变为null的原因是因为异常的类型。因此,如果您将_脚本部分移动,并在前面使用null,您就知道这是要查看的地方。

您的
渲染部分
看起来像什么?在_布局中是什么模型?这没有道理。模型对于每个视图都是特定的,而布局是相同的。如果它被用作包含,则不是。如何?我不确定我是否熟悉“作为包含使用的模型”。它可能是我所熟悉的,但不熟悉这个术语。Partial被用作include。如果不使用模型,则不需要模型。我认为这和部分或渲染部分无关。它们的存在是为了把我的脚本放在一个整洁的地方,而RenderSection的存在是为了让jQuery能够正常运行,就像我如何在页面底部包含脚本一样。我尝试了你的建议,但没有成功。我将我的_脚本与渲染部分一起移到顶部。单步走到@Model.CurrentYear并显示它有一年,然后在文档末尾抛出一个“未设置为对象实例的对象引用”。异常。这没有任何意义。这可能与我的一个NuGet软件包有关。我将创建一个新项目,并尝试复制该问题。:-)
<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);