【问题标题】:Partialview result returns null部分视图结果返回 null
【发布时间】:2013-06-12 14:38:24
【问题描述】:

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

【问题讨论】:

  • 您使用什么调试工具检查_ContentBlock.cshtml 部分中的模型是否为空?还有这个动作怎么称呼?你在使用一些 AJAX 调用吗?你能展示你的代码吗?
  • 达林,我已经更新了我的问题。是的,_ContentBlock.cshtml 中的模型为空。我没有使用 AJAX。
  • 但是您如何调用问题中显示的控制器操作?正是这个控制器动作将模型传递给局部。
  • 达林,我知道,我必须使用 Html.Action() 方法调用局部视图。但是如果您检查我的代码(上图),实际上我在 Partial View.Offfff 中调用局部视图:D I有困惑:S
  • 所以你用Html.Partial而不是Html.Action

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


【解决方案1】:

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

【讨论】:

  • 达林谢谢你,我已经解决了@Html.Partial("_PartialViewName",Model)的问题
【解决方案2】:

您的页面Page.cshtml 正在调用部分视图操作Module,使用:

@Html.Action("Module")

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

"~/Modules/Content/_ContentBlock.cshtml"

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

return PartialView(Query.Single());

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

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

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

编辑:

您遇到的另一个问题是_ContentBlock.cshtml 使用IEnumerable&lt;ContentBlock&gt; 的模型,但您只是从您的ContentBlock 操作中将.Single() 传递给它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    相关资源
    最近更新 更多