Partialview结果返回null

时间:2013-06-12 14:38:24

标签: asp.net-mvc razor model actionresult asp.net-mvc-partialview

部分视图不会返回任何数据。当我在PartialView页面(_ContentBlock.cshtml)上查看调试工具时,模型似乎为空。

控制器

public ActionResult Module()
{
    int RouteDataValue = default(int);
    if (RouteData.Values["id"] != null)
    {
        RouteDataValue = int.Parse(RouteData.Values["id"].ToString());
    }

    using (Models.ContentModel db = new Models.ContentModel())
    {
        var Query = from n in db.PageModule
                       join m in db.Module on n.ModuleId equals m.ModuleId
                       where n.PageId == RouteDataValue
                       select m.PhysicalPath;

        return PartialView(Query.Single()); //returns PartialView such as ~/Modules/Content/_ContentBlock.cshtml
    }
}

public PartialViewResult ContentBlock()
{
    using (Models.ContentModel db = new Models.ContentModel())
    {
        return PartialView("~/Modules/Content/_ContentBlock.cshtml", db.ContentBlock.Where(n => n.PageId == 2).Single());
    }
}

Page.cshtml

@Html.Action("Module")

_ContentBlock.cshtml

@model IEnumerable<Models.ContentBlock>
@foreach (var item in Model)
{
    @Html.DisplayFor(n => item.Content)
}

2 个答案:

答案 0 :(得分:2)

您似乎使用了Html.Partial帮助程序而不是Html.Action。所以你基本上只渲染部分而没有碰到应该填充的控制器动作和模型到部分。

答案 1 :(得分:1)

您的网页Page.cshtml正在使用以下网址调用部分查看操作Module

@Html.Action("Module")

正在执行名为Module的操作。在该操作中,您的查询会生成视图的路径,例如:

"~/Modules/Content/_ContentBlock.cshtml"

该操作使用以下命令返回该查询的单个结果:

return PartialView(Query.Single());

这样做是将视图的名称传递给PartialView方法,以返回将用于显示操作数据的视图。此外,此回报中不包含任何模型数据。

问题出在哪里。当您返回部分视图的路径时,您只是告诉MVC系统使用哪个视图来显示来自Module的数据。它实际上无法调用另一个部分视图。这不是它的工作原理。因此,您的模型为空,因为您未在PartialView(...)来电中传递任何数据。

您还有另一个名为ContentBlock的操作。但是这个动作没有被调用,因为没有任何东西在呼唤它。

修改

您遇到的另一个问题是_ContentBlock.cshtml使用了IEnumerable<ContentBlock>的模型,但您只是从.Single()行动中传递了ContentBlock