简述:
viewmodel是ASP.NET Core MVC应用中的隐式声明的层,用来维护Model和View之间的数据传递,是View的数据容器。Model向视图传递数据最可靠的方法是在视图中指定模型类型。此模型通常称为 viewmodel。将 viewmodel 类型的实例传递给视图。使用 viewmodel 将数据传递给视图可让视图充分利用强类型检查。强类型化(或强类型)意味着每个变量和常量都有明确定义的类型(例如 string
、int
或 DateTime
)。在编译时检查视图中使用的类型是否有效。
扩展:
工作原理流:
1、用户提出需求,Controller处理用户的交互逻辑,执行简单的判断。
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。