如果我在没有控制器的情况下使用Razor页面,如何实现ViewModel

时间:2019-05-02 18:09:10

标签: asp.net tsql mvvm viewmodel razor-pages

还是我需要使用控制器?我有一个电影类,一个流派类和一个媒体类,我需要将它们合并到模型视图中,这样我才能在Razor页面上访问多个模型。我已经看到了许多有关Model-View-ViewModel模式的文档,但它们似乎都围绕使用Controllers展开。

ViewModel类,位于名为“ ViewModel”的单独文件夹中

namespace MyMovies.Models
{
    public class MoviesModelView
    {
        public List<Movies> Movies { get; set; }
        public List<Media> Media { get; set; }
        public List<Genres> Genres { get; set; }
        public List<TitleType> TitleType { get; set; }

    }
}

我的流派模型示例。我的其他课程(例如媒体,电影)与之类似,只是它们的课程不同。

namespace MyMovies.Models
{
    public class Genres
    {
        [Key]
        public byte GenreID { get; set; }
        public String GenreName { get; set; }
        public String ImageURL { get; set; }
    }
}

我试图创建一个RazorPage脚手架,该脚手架实际上结合了每个类的代码。但是我不能在没有主键的情况下搭建支架。当我没有实体框架的脚手架时,它说找不到我的页面。是否有关于使用剃须刀页面(无控制器)创建MVVM模式的文档?

1 个答案:

答案 0 :(得分:0)

PageModel class in Razor Pages被视为充当控制器和ViewModel的组合。默认情况下,它通过@model伪指令暴露于其内容页(类似于MVC视图)。您可以为ViewModel中包装的每一项添加属性到PageModel中:

public class MyPageModel : PageModel
{
    public List<Genre> Genres { get; set; }
    public List<Movie> Movies { get; set; }
    ...
}

或者您也可以将ViewModel添加为属性:

public class MyPageModel : PageModel
{
    public MoviesModelView ViewModel { get; set; }
}

在第一个示例中,您将按期望的方式引用内容页面中的内容:

@foreach(var movie in Model.Movies)
{

}

第二个方面(无论如何对我来说)比较混乱:

@foreach(var movie in Model.ViewModel.Movies)
{

}