0

部分视图不返回任何数据。当我在 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());
    }
}

页面.cshtml

@Html.Action("Module")

_ContentBlock.cshtml

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

2 回答 2

2

您似乎使用了Html.Partialhelper 而不是Html.Action. 因此,您基本上只渲染了部分,而没有点击应该填充的控制器操作和模型到部分。

于 2013-06-12T15:16:55.317 回答
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操作中传递它。

于 2013-06-12T15:20:28.383 回答