这个问题实际上有两个部分:
我想在Home控制器的Index页面上显示我的Event模型中的记录。默认情况下,没有数据发送到Home控制器的Index视图,更不用说是否存在显示方式。我解决这个问题的方法是将Event \ Index.cshtml的大部分内容复制到Home \ Index.cshtml以及从EventController.cs到HomeController.cs的一些行。
我在HomeController.cs中添加了第3行和第6行,如下所示:
1 public class HomeController : Controller
2 {
3 private ETODbContext db = new ETODbContext();
4 public ActionResult Index()
5 {
6 return View(db.Events.ToList());
7 //return View();
9 }
10 ...
我怀疑这是否是正确的方法,因为当我还想在同一个Home \ Index视图中显示来自另一个模型的数据时,我会怎么做?
至于我的第二个问题,因为我已将Event \ Index.cshtml的视图代码复制到Home \ Index.cshtml中,我现在必须在两个地方维护该代码。这听起来是利用两个文件中使用的部分视图的好时机。我在这里有正确的想法吗?
答案 0 :(得分:3)
关于模型的问题,您应该创建一个ViewModel
,其中包含您想要表示的数据(一个模型在开头,您可以在以后添加更多模型):
public class HomeViewModel
{
public IList<Event> Events {get;set;}
public IList<AnotherModel> AnotherModels {get;set;}
}
然后,您将在视图中使用此模型。
在控制器操作中构造此viewmodel:
public class HomeController : Controller
{
private ETODbContext db = new ETODbContext();
public ActionResult Index()
{
var model = new HomeViewModel {Events = db.Events.ToList()};
return View(model);
}
}
至于问题的第二部分,你可以将w视图的相似部分提取到局部视图中,然后在两个视图中呈现:
_Events.cshtml (您可以将其放在共享文件夹中,以便在那里自动找到)
@model IList<Event>
<div>
@foreach(var ev in Model)
{
<h2>@ev.Name</h2>
}
</div>
在你的家庭索引视图中:
@model HomeViewModel
<div>@Html.Partial("_Events", Model.Events)</div>
在您的事件索引视图中:
@model IList<Event>
<div>@Html.Partial("_Events", Model)</div>