Net Core教程

ASP.NET Core MVC中的viewmodel

本文主要是介绍ASP.NET Core MVC中的viewmodel,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

简述:

      ViewModel是ASP.NET Core MVC应用中的隐式声明的层,用来维护Model和View之间的数据传递,是View的数据容器。Model向视图传递数据最可靠的方法是在视图中指定模型类型。此模型通常称为 viewmodel。将 viewmodel 类型的实例传递给视图。使用 viewmodel 将数据传递给视图可让视图充分利用强类型检查。强类型化(或强类型)意味着每个变量和常量都有明确定义的类型(例如 stringint 或 DateTime)。在编译时检查视图中使用的类型是否有效。

扩展:

 工作原理流:

1、用户提出需求,Controller处理用户的交互逻辑,执行简单的判断。

2、Controller获取一个或者多个Model数据

3、Controller决策使用哪个View最符合用户请求

4、Controller将根据Model数据和View需求创建并初始化ViewModel对象

5、Controller将ViewModel数据以ViewData或者ViewBag或者强类型的View等对象传递到View中,并返回View。

ViewModel分别与View,Model关联方式:

View将变成ViewModel的强类型的View,Model却和ViewModel是互相独立的,Controller将根据Model对象创建并初始化ViewModel对象。

使用示例:

使用 @model 指令指定模型。使用带有 @Model 的模型:


@model WebApplication1.ViewModels.Address
<h2>Contact</h2><address>    @Model.Street<br>    @Model.City, @Model.State @Model.PostalCode<br>    <abbr title="Phone">P:</abbr> 425.555.0100</address>

为了将模型提供给视图,控制器将其作为参数进行传递:


public IActionResult Contact(){    ViewData["Message"] = "Your contact page.";
    var viewModel = new Address()    {        Name = "Microsoft",        Street = "One Microsoft Way",        City = "Redmond",        State = "WA",        PostalCode = "98052-6399"    };
    return View(viewModel);}

没有针对可以提供给视图的模型类型的限制。建议使用普通旧 CLR 对象 (POCO) viewmodel,它几乎没有已定义的行为(方法)。通常,viewmodel 类要么存储在“Models”文件夹中,要么存储在应用根目录处的单独“ViewModels”文件夹中。上例中使用的 Address viewmodel 是存储在 Address.cs 文件中的 POCO viewmodel:


namespace WebApplication1.ViewModels{    public class Address    {        public string Name { get; set; }        public string Street { get; set; }        public string City { get; set; }        public string State { get; set; }        public string PostalCode { get; set; }    }}

可随意对 viewmodel 类型和业务模型类型使用相同的类。但是,使用单独的模型可使视图独立于应用的业务逻辑和数据访问部分。模型为用户发送给应用的数据使用模型绑定和验证时,模型和 viewmodel 的分离也会提供安全优势。

引用1:https://docs.microsoft.com/zh-cn

引用2:https://blog.csdn.net/jasonhds/article/details/51141664

这篇关于ASP.NET Core MVC中的viewmodel的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!