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=新列表();
}
}
可能的重复非常感谢,非常有用非常感谢,非常有用