Asp.net mvc 更改电影列表MVC教程-添加新的局部视图

Asp.net mvc 更改电影列表MVC教程-添加新的局部视图,asp.net-mvc,asp.net-mvc-3,model,partial-views,Asp.net Mvc,Asp.net Mvc 3,Model,Partial Views,我按照本教程学习基本的MVC,我在本教程的末尾。现在我想对本教程进行自己的修改。首先,我想在此电影列表视图中添加一个新的局部视图。因此,在一个DIV中,我将以下代码放在已经呈现电影列表的索引页中 @{Html.RenderPartial("_NewPartialView");} 为此,首先在Models文件夹中,我为NewClass.cs创建了一个新的模型类。模型文件夹已具有电影模型类。Movie.cs 问题1:我应该为新的局部视图创建一个单独的Model.cs文件,还是应该在同一个Movi

我按照本教程学习基本的MVC,我在本教程的末尾。现在我想对本教程进行自己的修改。首先,我想在此电影列表视图中添加一个新的局部视图。因此,在一个DIV中,我将以下代码放在已经呈现电影列表的索引页中

 @{Html.RenderPartial("_NewPartialView");}
为此,首先在Models文件夹中,我为NewClass.cs创建了一个新的模型类。模型文件夹已具有电影模型类。Movie.cs 问题1:我应该为新的局部视图创建一个单独的Model.cs文件,还是应该在同一个Movie.cs文件中创建其他类

然后,我使用基于新模型的脚手架创建了一个局部视图(现在,我在一个单独的.cs文件中有了新模型-这意味着我现在有两个模型,一个用于电影,另一个用于新模型(用于partialview)。我希望在原始电影列表索引页中将其作为局部视图呈现在侧面

我有一个有代码的MoviesController

 public ViewResult Index()
    {
        return View(db.Movies.ToList());
    }
我还遗漏了什么吗?如果我尝试运行这个,它会在代码行中断

 @{Html.RenderPartial("_NewPartialView");}
在代码的这一点上,我得到的错误消息是“传入字典的模型项的类型是System.Collections.Generic.List
1[Project.Models.Movie]”,但该字典需要一个类型为“System.Collections.Generic.IEnumerable
1[Project.Models.NewModel]”的模型项


在将基于新模型的新局部视图添加到现有视图/模型的这一步骤中,我需要一些MVC专家指导。我需要帮助并感谢任何有助于我学习的tid信息。感谢您查看错误消息,您的视图希望看到一个包含
Project.Models类的
IEnumerable
。NewModel
当您传递一个包含
Project.Models.Movie
类的
列表时,您将在其中传递视图数据。基本上,您传递的视图数据不是设计用来处理的。您可以更改顶部的视图/部分,如下所示:

@model List<Project.Models.Movie>
然后将
IEnumerable
传递给您的视图

另一方面,razor中引用partials的更简单方法是:

@Html.Partial("_NewPartialView")
更新 您需要自己创建一个
ViewModel
,使其看起来像这样:

public class IndexViewModel
{
  public List<Movie> Movies {get; set;}
  public List<NewModel> NewModels {get; set;}
}

public ViewResult Index()
{
    var viewModel = new IndexViewModel
    {
      Movies = db.Movies.ToList(),
      NewModels = new List<NewModel>() // Or however you populate it
    };

    return View(viewModel );
}
你们的新模型将是

@Html.Partial("_NewPartialView", Model.NewModels)

注意:您需要更新索引页面顶部的模型,以引用IndexViewModel。

“您可以将顶部的视图/局部视图更改为:@model List”之类的内容,但新的局部视图不是基于电影模型的。它是其他的。比如说,TVShows(新模型)可能是我不够清楚。这是我在Index.cshtml上想要的两个不同的东西…基于两个模型…一个现有的Movie.cs模型和另一个NewModel.cs…索引页已经有一个电影视图列表…我想添加一个新列表(partialview)基于完全不同的模型,.cs文件类。如果我按照您在第二个选项中的建议…更改ViewResult索引()…我将如何在同一页中完成两个视图…好的,但在控制器中,您传递的视图是一个电影列表,这就是问题所在。在控制器中,您需要传递正确类型的视图,在您的示例中,TVShows现在很有意义…谢谢。我将在几分钟后尝试并返回给您。再次感谢您的帮助p、 IndexView模型-它是否需要自己的.cs文件或电影或NewModel.cs文件的一部分?或者它只是添加到控制器中?…考虑引用它..您的最后一条评论行。
public class IndexViewModel
{
  public List<Movie> Movies {get; set;}
  public List<NewModel> NewModels {get; set;}
}

public ViewResult Index()
{
    var viewModel = new IndexViewModel
    {
      Movies = db.Movies.ToList(),
      NewModels = new List<NewModel>() // Or however you populate it
    };

    return View(viewModel );
}
@foreach (var moive in Model.Movies) { }
@Html.Partial("_NewPartialView", Model.NewModels)