我的家庭控制器和我的“ StatusController”都创建了一个DBEntities的新实例。主控制器将_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>
      }


这很好,用数据库中VM的名称填充下拉列表。
_GetforStatus。
为此,家用控制器部分的编写方式如下:

 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拉到Layout视图中存在冲突。
如何在ASP.NET MVC 4中将视图和部分视图返回到索引布局?

更新:我只是将Action放在Home Controller中,因为我不知道为什么它找不到我的Controller“ StatusController”。现在,我使用@ {Html.RenderAction(“ _ GetforStatus”);}遇到了另一个错误,“传递给字典的模型项的类型为'System.Collections.Generic.List'1 [IntegrationWeb.models.Job]',但是该词典需要类型为'IntegrationWeb.models.Job'的模型项。”有人知道这是怎么回事吗?

最佳答案

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

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


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

关于c# - 如何在ASP.NET MVC 4中将 View 和部分 View 返回到索引布局?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28565584/

10-10 18:12