另一个控制器中的部分视图查看MVC5

时间:2015-10-24 19:31:10

标签: asp.net-mvc razor asp.net-mvc-5 asp.net-mvc-partialview

我很想在mvc中使用部分视图,并且由于某些原因无法实现这一点

Notes.cshtml

@model IEnumerable<SI2.Models.DashboardNote>

@foreach (var item in Model)
{
    <div class="col-lg-12">
        <div class="well">
            <p>@Html.DisplayFor(modelItem => item.Information)</p><br />
            <p>@Html.DisplayFor(modelItem => item.DateCreate)</p>
        </div>
    </div>
}

这是我试图在另一个控制器视图中调用局部视图的地方

主/ Index.cshtml

<div class="row">
    <div class="col-lg-12">
        <div class="panel panel-default">
            <div class="panel-heading"><i class="fa fc-agenda-view"></i>   Notes</div>
            <div class="panel-body">
                @Html.Partial("~/Views/DashboardNotes/Notes.cshtml")
            </div>
        </div>
    </div>
</div>

Notes控制器

public ActionResult Notes()
{
     return View(db.DashboardNotes.ToList());
}

每当我尝试将Notes.cshtml作为局部视图调用时,我都会收到一个System.NullReferenceException,其中“对象引用未设置为对象的实例”,但如果我正常运行视图则会完美运行。两种型号的控制器之间也没有关系。

感谢您的帮助:)

1 个答案:

答案 0 :(得分:3)

下面的代码会使你的部分没有注释,因此是空引用,因为你有一个空注释的foreach。

@Html.Partial("~/Views/DashboardNotes/Notes.cshtml")

Html.Partial中没有机制触发对服务器的调用。如果你以现在的方式加载它,你必须在你的部分中做一些类型的ajax调用来获取注释。最简单的方法是在父视图或页面中返回Notes并将模型传递给部分,见下文:

@model MainViewWithNotes

<div class="row">
    <div class="col-lg-12">
        <div class="panel panel-default">
            <div class="panel-heading"><i class="fa fc-agenda-view"></i>   Notes</div>
            <div class="panel-body">
                @Html.Partial("~/Views/DashboardNotes/Notes.cshtml",MainViewWithNotes.Notes)
            </div>
        </div>
    </div>
</div>