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

这个问题实际上有两个部分:

  • 我做的对吗
  • 我应该使用局部视图吗
  • 我想在主控制器的索引页上显示事件模型中的记录。默认情况下,没有数据发送到主控制器的索引视图,更不用说是否存在显示方式。我解决这个问题的方法是将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 ...
    
    我怀疑这是否是正确的方法,因为当我还想在同一主视图\索引视图中显示来自另一个模型的数据时,我该怎么办


    至于我的第二个问题,因为我已经将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>