ASP.NET Core MVC中的viewmodel
2021/10/3 17:41:07
本文主要是介绍ASP.NET Core MVC中的viewmodel,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
简述:
ViewModel是ASP.NET Core MVC应用中的隐式声明的层,用来维护Model和View之间的数据传递,是View的数据容器。Model向视图传递数据最可靠的方法是在视图中指定模型类型。此模型通常称为 viewmodel。将 viewmodel 类型的实例传递给视图。使用 viewmodel 将数据传递给视图可让视图充分利用强类型检查。强类型化(或强类型)意味着每个变量和常量都有明确定义的类型(例如 string
、int
或 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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#