Asp.net mvc Partialview结果返回null

Asp.net mvc Partialview结果返回null,asp.net-mvc,razor,model,actionresult,asp.net-mvc-partialview,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"].ToSt

部分视图不返回任何数据。当我在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")
@model IEnumerable<Models.ContentBlock>
@foreach (var item in Model)
{
    @Html.DisplayFor(n => item.Content)
}
\u ContentBlock.cshtml

@Html.Action("Module")
@model IEnumerable<Models.ContentBlock>
@foreach (var item in Model)
{
    @Html.DisplayFor(n => item.Content)
}
@model IEnumerable
@foreach(模型中的var项目)
{
@DisplayFor(n=>item.Content)
}

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

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

您的页面
page.cshtml
使用以下方法调用部分视图操作
模块

@Html.Action("Module")
正在执行名为
模块
的操作。在该操作中,查询将生成指向视图的路径,例如:

"~/Modules/Content/_ContentBlock.cshtml"
该操作使用以下命令返回该查询的单个结果:

return PartialView(Query.Single());
这样做的目的是将视图的名称传递给
PartialView
方法,以返回将用于显示操作数据的视图。此外,本申报表中不包含任何模型数据

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

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

编辑:


您遇到的另一个问题是
\u ContentBlock.cshtml
使用了
IEnumerable
的模型,但您只从
ContentBlock
操作中传递了
.Single()

您的页面
页面。cshtml
正在使用以下命令调用部分视图操作
模块

@Html.Action("Module")
正在执行名为
模块
的操作。在该操作中,查询将生成指向视图的路径,例如:

"~/Modules/Content/_ContentBlock.cshtml"
该操作使用以下命令返回该查询的单个结果:

return PartialView(Query.Single());
这样做的目的是将视图的名称传递给
PartialView
方法,以返回将用于显示操作数据的视图。此外,本申报表中不包含任何模型数据

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

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

编辑:


另一个问题是
\u ContentBlock.cshtml
使用了
IEnumerable
的模型,但您只从
ContentBlock
操作中传递了
.Single()

使用什么调试工具检查
\u ContentBlock.cshtml
部分中的模型是否为空?这一行动又是如何进行的?你在使用AJAX调用吗?你能展示你的代码吗?达林,我已经更新了我的问题。是的,ContentBlock.cshtml中的模型是空的。我没有使用AJAX。但是你如何调用问题中显示的控制器操作?正是这个控制器操作将模型传递给partial.Darin,我知道,我必须用Html.action()方法调用一个partial视图,实际上,我正在调用Partial view in Partial view.Offfff:D,我搞混了:您使用的是
Html.Partial
而不是
Html.Action
?您使用什么调试工具检查
\u ContentBlock.cshtml
Partial中的模型是否为空?这一行动又是如何进行的?你在使用AJAX调用吗?你能展示你的代码吗?达林,我已经更新了我的问题。是的,ContentBlock.cshtml中的模型是空的。我没有使用AJAX。但是你如何调用问题中显示的控制器操作?正是这个控制器操作将模型传递给了partial.Darin,我知道,我必须用Html.action()方法调用一个partial view。但是如果你检查我的代码(上面),实际上我是在partial view中调用partial view。Offfff:D我搞混了:SSo你使用了
Html.partial
而不是
Html.action
?Darin谢谢,我已经用@Html.Partial(“\u PartialViewName”,Model)解决了这个问题。谢谢,我用@Html.Partial(\u PartialViewName,Model)解决了这个问题