我想做以下事情,我无法弄明白。我有一个控制器,其中包含一个显示数据列表的视图。我想在主页上显示该数据列表。有没有办法在主页的控制器中使用该数据列表的视图?
答案 0 :(得分:0)
您想在一个视图中实现两个(或更多)模型渲染吗?如果是,那么这是你的答案。
假设您有两个模型Book
和Movie
public class Book
{
public int BookId { get; set; }
public string BookTitle { get; set; }
}
public class Movie
{
public int MovieId { get; set; }
public string MovieTitle { get; set; }
}
然后你想在一个视图中获取所有书籍和所有电影。因此,创建新类(例如在名为ViewModels
的新文件夹中,您的类名可以是任何内容,但我们将其命名为ViewModel
。在您的类ViewModel中编写Book
和{{ 1}}模型。
Movie
如果您还想显示列表,则需要指定IEnumerable列表,此处适用于public class ViewModel
{
public Book Book { get; set; }
public IEnumerable<Book> Books { get; set; }
public Movie Movie { get; set; }
public IEnumerable<Movie> Movies { get; set; }
}
和Books
。
最后在您的控制器中,您只需写下:
Movies
您的观点 public ActionResult Index()
{
var viewModel = new ViewModel
{
Movies = db.Movies.ToList(),
//you can also do this:
Movies = db.Movies.Where() //and so on
Books = db.Books.ToList()
};
return View(viewModel);
}
将是
@model
希望它有所帮助。
答案 1 :(得分:0)
所以你说你现在有类似的东西:
public DataController() {
public ActionResult Index()
{
.. load data
return View(data);
}
}
如果您将数据列表转换为PartialView
,则可以在任何其他视图中使用该数据列表,例如:
public DataController() {
public ActionResult Index()
{
return View();
}
public ActionResult DataPartial()
{
.. load data
return Partial(data);
}
}
然后在原始视图中,将与数据相关的部分移出DataPartial.cshtml
,并在index.cshtml中添加对操作的调用:
@Html.Action("DataPartial");
然后您可以通过如上所述调用它来重新使用此部分/操作,还可以指定控制器
public HomeController() {
public ActionResult Index()
{
return View();
}
}
和home \ index.cshtml:
@Html.Action("DataPartial", "Data")
答案 2 :(得分:0)
谢谢,我明白了。我做了一个局部视图,并在两个索引视图中实现了部分视图(从主页和数据列表的实际页面)