【问题标题】:How to implement ViewModel if I am using Razor Pages with no Controller如果我使用没有控制器的 Razor 页面,如何实现 ViewModel
【发布时间】:2019-09-21 07:16:12
【问题描述】:

或者我需要使用控制器吗?我有一个电影类、一个流派类和一个媒体类,我需要将它们组合到一个模型视图中,以便我可以访问我的 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 模式的文档?

【问题讨论】:

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


    【解决方案1】:

    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)
    {
    
    }
    

    【讨论】:

    • 谢谢,我会试试这个。在没有主键的情况下搭建我的剃须刀页面怎么样?
    猜你喜欢
    • 2019-01-20
    • 2023-03-31
    • 2020-10-22
    • 2020-02-29
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多