C# 在另一个模型的视图上显示一个模型的数据:我做得对吗?
这个问题实际上有两个部分:C# 在另一个模型的视图上显示一个模型的数据:我做得对吗?,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,这个问题实际上有两个部分: 我做的对吗 我应该使用局部视图吗 我想在主控制器的索引页上显示事件模型中的记录。默认情况下,没有数据发送到主控制器的索引视图,更不用说是否存在显示方式。我解决这个问题的方法是将Event\Index.cshtml的大部分内容复制到Home\Index.cshtml,并将一些行从EventController.cs复制到HomeController.cs 我在HomeController.cs中添加了第3行和第6行,如下所示: 1 public class HomeC
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 ...
我怀疑这是否是正确的方法,因为当我还想在同一主视图\索引视图中显示来自另一个模型的数据时,我该怎么办
至于我的第二个问题,因为我已经将Event\Index.cshtml的视图代码复制到Home\Index.cshtml中,所以我现在必须在两个地方维护该代码。这听起来是利用两个文件中使用的局部视图的好时机。我的想法正确吗?关于模型的问题,您应该创建一个
ViewModel
,其中将包含您想要表示的数据(开始时一个模型,以后可以添加更多模型):
至于问题的第二部分,您可以将W视图的相似部分提取到局部视图中,然后在两个视图中呈现:
\u Events.cshtml(您可以将其放置在共享文件夹中,以便在那里自动找到它)
@model-IList
@foreach(模型中的var ev)
{
@电动汽车名称
}
在主索引视图中:
@model HomeViewModel
<div>@Html.Partial("_Events", Model.Events)</div>
@model IList<Event>
<div>@Html.Partial("_Events", Model)</div>
@model HomeViewModel
@Html.Partial(“_事件”,Model.Events)
在事件索引视图中:
@model HomeViewModel
<div>@Html.Partial("_Events", Model.Events)</div>
@model IList<Event>
<div>@Html.Partial("_Events", Model)</div>
@model-IList
@Html.Partial(“\u事件”,模型)
主页\Index视图做了什么和/或显示了事件\Index
没有做什么(即为什么有两个单独的视图)?主页\Index
是主页/仪表板。在Event\Index
上放置其他类似于仪表板的元素是不合适的。为什么我的问题被否决了?然后是一个视图模型和vsevold建议的部分,或者使用@Html.Action()
渲染显示事件的子操作。我将尝试一下。也许这对我来说应该是显而易见的,但如何将HomeViewModel放入DbContext?或者更确切地说,我应该将第3行和第6行更改为什么?以下是仅对您提供的更改所得到的结果:传递到字典中的模型项的类型为“System.Collections.Generic.List
1[ETO.Models.Event]”,但此字典需要类型为“ETO.Models.HomeViewModel.”“new HomveViewModel”-->“new HomeViewModel”的模型项。我无法编辑这篇文章,因为它少于6个字符。它现在大部分都可以工作了。谢谢唯一的问题是它不喜欢IList
,我不得不使用IEnumerable
。对于IList
,@Html.DisplayNameFor(model=>model.Description)
不起作用,表示Description
没有定义,但@Html.DisplayFor(modeleItem=>item.Description)
工作正常。
@model IList<Event>
<div>@Html.Partial("_Events", Model)</div>