如何将视图和部分视图返回到 ASP.NET MVC 4 中的索引布局?

Posted

技术标签:

【中文标题】如何将视图和部分视图返回到 ASP.NET MVC 4 中的索引布局?【英文标题】:How do I return a View and a Partial View to the Index Layout in ASP.NET MVC 4? 【发布时间】:2015-04-18 09:21:26 【问题描述】:

我的家庭控制器和我的“StatusController”都创建了一个 DBEntities 的新实例。 Home Controller 将 _db.VMs ViewData.Model 返回到 _Layout.cshtml 视图,而 Status Controller 将 _db.Jobs ViewDataModel 作为局部视图返回到 _GetForStatus.cshtml 视图。我将 VMs ViewData 模型称为 _Layout 视图,如下所示:

 @foreach (var m in ViewData.Model)
      
           <li><a href="#">@m.Name</a></li>
      

这很好用,用数据库中的虚拟机名称填充下拉列表。 _GetforStatus。 用于此的 Home Controller 部分是这样编写的:

 public ActionResult index()
      
           _db = new IntegrationDBEntitires();
           ViewData.Model = _db.VMs.ToList();
           return View();
      

StatusController 是这样写的:

 public PartialViewResult _GetforStatus()
      
           _db = new OntegrationDBEntities();
           ViewData.Model = _db.Jobs.ToList();
           return PartialView();
      

_GetforStatus 视图是这样写的:

 @model IntegrationWeb.Models.Job
      <div class="progress progress-striped active">
           <div class="progress-bar" style="width: @((Model.IS_Progress / Model.IS_Total)*100)%"></div>
      </div>
 @Html.Action("_GetforStatus", "StatusController")

在 _Layout 视图中这样调用:\

 @Html.Partial("~/Views/_GetforStatus.cshtml")

我在这里遇到错误。 “传入字典的模型项的类型为‘System.Collections.Generic.List’1[IntegrationWeb.models.VM]’,但字典需要模型项类型‘IntegrationWeb.Models.Job’。 将两个不同的 DBEntities 拉到布局视图中似乎存在冲突。

更新:我只是将 Action 放在 Home Controller 中,因为我不知道为什么它找不到我的 Controller“StatusController”。现在我使用 @Html.RenderAction("_GetforStatus"); “传递到字典的模型项是类型'System.Collections.Generic.List'1 [IntegrationWeb.models.Job]',但是这个字典需要一个‘IntegrationWeb.models.Job’类型的模型项。”有人知道这里发生了什么吗?

【问题讨论】:

显示布局视图和主视图 partialView() 是做什么的?这不是标准方法... 我不确定你在问什么。我的理解是它返回部分视图。 MVC中没有叫partialView()的方法,有PartialView()...这只是一个错字吗? 是的,这是一个错字。我正在从另一台计算机重写。 【参考方案1】:

分部视图从父视图继承模型,除非您专门传递一个属性,或者创建另一个对象来传递给它。它们也处理相同的请求。因此,在您的示例中,部分视图的控制器操作甚至没有被执行。您需要做的是使用 RenderAction。

@ Html.RenderAction("_GetforStatus","ControllerName"); 

这将允许您使用自己的模型和单独的请求来执行视图。

【讨论】:

是在 _Layout.cshtml 视图、GetforStatus.cshtml 视图还是两者中? 我都尝试了,但出现错误:“/”应用程序中的服务器错误。编译器错误消息:CS1502。无效参数。 该调用可以在您的布局视图或主/父视图中。另请注意 Html.RenderAction 和 Html.Action 非常相似。 Html.Action 返回一个字符串,其中 RenderAction 直接输出到响应流并允许更好的性能。不确定是什么导致您的编译器错误。你的其他代码有变化吗? 不,我没有改变任何东西。 它似乎没有找到我的控制器。我在 _Layout 共享视图中这样写:@Html.Action("StatusController", //我的控制器名称。"_GetforStatus" //我控制器内部的 PartialViewResult 动作。);它没有找到路径。【参考方案2】:

代替

@Html.Partial("~/Views/_GetforStatus.cshtml")

简单地做

@Html.Action("_GetForStatus", "MyController")

Html.Partial 实际上并没有触发动作,它只是渲染 cshtml 文件。

【讨论】:

现在我收到错误:找不到控制器路径“/”或未实现 IController @Html.Action("_GetforStatus", "StatusController);

以上是关于如何将视图和部分视图返回到 ASP.NET MVC 4 中的索引布局?的主要内容,如果未能解决你的问题,请参考以下文章

如何缓存将图像返回到asp.net mvc中的视图的操作方法的输出?

ASP.NET MVC 将部分视图呈现为字符串以返回 JSON [重复]

如何将消息从我的存储库类返回到我的控制器,然后返回到我在 asp.net-mvc 中的视图?

加入后将不同类型返回到视图(ASP.NET MVC2 C#)

关于ASP.NET MVC部分视图渲染问题。

在 ASP.NET MVC 站点中返回视图时操作页面滚动