C# 如何在单个视图中连接多个模型或多个视图模型?

C# 如何在单个视图中连接多个模型或多个视图模型?,c#,razor,model-view-controller,C#,Razor,Model View Controller,我正在做一个基本的应用程序 这是主控制器: public ActionResult Index() { var all = _context.mainz.ToList(); var vm = new mainViewModel() { main_lst = all }; return View(vm); } public ActionResult Detail

我正在做一个基本的应用程序

这是主控制器:

   public ActionResult Index()
    {
        var all = _context.mainz.ToList();
        var vm = new mainViewModel()
        {
            main_lst = all
        };

        return View(vm);
    }

    public ActionResult Details()
    {
        var dtl = _context.mainz.ToList();
        var vm = new mainViewModel()
        {
            main_lst = dtl
        };
        return View(vm);
    }


       public ActionResult count()
    {
        var ct = (from i in _context.mainz
                  where i.event_title != null
                  select i).ToList();
        var vm = new countVm()
        {
          count = ct
        };
        return View(vm);
    }
在此控制器中,索引和详细信息方法连接到两个不同的razor视图,如下所示:

@model testtt.ViewModel.countVm
<p>count is @Model.count.Count()</p>
namespace testtt.ViewModel
{
public class countVm
{
    public List<main> count { get; set; }
    public countVm()
    {
        count = new List<main>();
    }
}
}
 @Html.Partial("count")
这是索引的razor视图

@model testtt.ViewModel.mainViewModel

@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}



<ul>
@foreach (var item in Model.main_lst)
{
    <li>@item.event_title</li>
}

</ul>
但当我将其添加到索引或详细信息视图中时,会生成一个错误,如下所示:

The model item passed into the dictionary is of type 'testtt.ViewModel.mainViewModel', but this dictionary requires a model item of type 'testtt.ViewModel.countVm'.
现在让我们假设这个计数方法有一些相同的数据,必须传递给所有其他razor视图,但不能单独传递,因为单独传递将非常耗时,假设明天由于任何原因,如果逻辑被更新,那么我必须单独地去到每个方法,并相应地更新它们,如果我们假设超过100种方法,这是不可能的


因此,简而言之,我正在寻找一种在单个razor视图中从两个视图模型检索数据的方法?

而不是调用局部视图。您可以调用操作,该操作将返回填充了模型的局部视图:

@Html.Action("count","controllername")
或者,我们可以在主视图模型中将该计数视图模型添加为属性,然后在渲染时将其传递给局部视图,如:

@Html.Partial("count",Model.CountVM)
在主视图模型中,您可以使用它:

public class mainViewModel
{
    public List<main> main_lst { get; set; }

    public countVm CountVM { get; set; }
    public mainViewModel()
    {
        main_lst = new List<main>();
    }
}
public类主视图模型
{
公共列表main_lst{get;set;}
public countVm countVm{get;set;}
公共主视图模型()
{
main_lst=新列表();
}
}

除了调用局部视图,您可以调用操作,该操作将返回局部视图,并填充模型:

@Html.Action("count","controllername")
或者,我们可以在主视图模型中将该计数视图模型添加为属性,然后在渲染时将其传递给局部视图,如:

@Html.Partial("count",Model.CountVM)
在主视图模型中,您可以使用它:

public class mainViewModel
{
    public List<main> main_lst { get; set; }

    public countVm CountVM { get; set; }
    public mainViewModel()
    {
        main_lst = new List<main>();
    }
}
public类主视图模型
{
公共列表main_lst{get;set;}
public countVm countVm{get;set;}
公共主视图模型()
{
main_lst=新列表();
}
}

可能的重复非常感谢,非常有用非常感谢,非常有用