在不同的控制器中使用视图的一部分

时间:2016-01-06 08:52:24

标签: asp.net-mvc asp.net-mvc-5

我想做以下事情,我无法弄明白。我有一个控制器,其中包含一个显示数据列表的视图。我想在主页上显示该数据列表。有没有办法在主页的控制器中使用该数据列表的视图?

3 个答案:

答案 0 :(得分:0)

您想在一个视图中实现两个(或更多)模型渲染吗?如果是,那么这是你的答案。

假设您有两个模型BookMovie

   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)

谢谢,我明白了。我做了一个局部视图,并在两个索引视图中实现了部分视图(从主页和数据列表的实际页面)