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

ant*_*n1p 2 c# partial-views razor asp.net-mvc-4 entity-framework-6

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

 @foreach (var m in ViewData.Model)
      {
           <li><a href="#">@m.Name</a></li>
      }
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,使用DB中的VM名称填充下拉列表._GetforStatus.用于此的Home Controller部分是这样编写的:

 public ActionResult index()
      {
           _db = new IntegrationDBEntitires();
           ViewData.Model = _db.VMs.ToList();
           return View();
      }
Run Code Online (Sandbox Code Playgroud)

StatusController的编写方式如下:

 public PartialViewResult _GetforStatus()
      {
           _db = new OntegrationDBEntities();
           ViewData.Model = _db.Jobs.ToList();
           return PartialView();
      }
Run Code Online (Sandbox Code Playgroud)

_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")
Run Code Online (Sandbox Code Playgroud)

这在_Layout视图中调用如下:\

 @Html.Partial("~/Views/_GetforStatus.cshtml")
Run Code Online (Sandbox Code Playgroud)

我在这里收到错误."传递到字典中的模型项的类型为'System.Collections.Generic.List'1 [IntegrationWeb.models.VM]',但字典需要模型项类型'IntegrationWeb.Models.Job'.看起来好像有将两个不同的DBEntities拉入布局视图是一个冲突.
如何将视图和部分视图返回到ASP.NET MVC 4中的索引布局?

更新:我只是将Action放在Home Controller中,因为我无法弄清楚为什么它找不到我的Controller"StatusController".现在我使用@ {Html.RenderAction("_ GetforStatus")得到了一个不同的错误;}"传入字典的模型项是'System.Collections.Generic.List'1 [IntegrationWeb.models.Job]',但是这个字典需要一个'IntegrationWeb.models.Job'类型的模型项." 有谁知道这里发生了什么?

Bra*_*ell 6

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

@{ Html.RenderAction("_GetforStatus","ControllerName"); }
Run Code Online (Sandbox Code Playgroud)

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