在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图
在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图
前提介绍
方法的总体介绍
- ViewModel 允许我们将多个类型的数据模型(models)当成一个类型数据模型来加载一个视图。
- 很棒的智能支持和编译阶段的在视图页面的错误检测功能。
- 使用ViewModel的话,视图只能获得它所需要的数据,这也对安全问题有好处。核心的数据模型不会暴露给用户。
- 如果在核心的数据模型中有什么改变,你不需要在视图的代码中再修改,你只需要修改系那个管的ViewModel。
- 用这个方式,ViewModel 促进了应用中的松耦合。
- 提高了视图代码在程序中的重用性。
- 对于单一页面(Single Page Application)应用非常有用。
- 你也可以在Partial View中使用ViewModel。
- 使用Partial View,你能够使用AJAX来更新一部分页面而不刷新整个页面。
- 如果使用很多的话,视图变成了一个很多Partial View的集合,所以有时候可读性会差一点。
- 使用ViewBag, 我们可以很省事的把数据从控制器发送到视图。
- ViewBag的语法比ViewData好用,不需要使用键值Key。
- ViewBag 不需要做数据类型的类型转换。
- 它只用于单方向的传递数据,即从控制器到视图。
- ViewBag的值只能在当前的请求中有效,它的值不能在多个请求之间之久,意味着如果有Redirection(重导),ViewBag的值变成空。
- 过度使用ViewBag当然是一个不好的做法。不推荐使用在企业级的应用程序中,尽管有时候它被用在传递少量的数据。
- 没有智能支持和编译阶段检测错误的功能。
- 使用ViewData我们能使用内置的属性伴随着键值Key,把数据从控制器传递到视图中。
- 只是应用于单方向的数据传递,也就是从控制器到视图。
- ViewData的值只能在当前的请求中有效,它的值不能在多个请求之间之久,意味着如果有Redirection(重导),ViewData的值变成空。
- 过度使用ViewData当然是一个不好的做法。不推荐使用在企业级的应用程序中,尽管有时候它被用在传递少量的数据。
- 语法要使用键值Key,使得它不如ViewBag的可读性,ViewBag使用属性类型的语法。
- 没有智能支持和编译阶段检测错误的功能。
- 你可以从一个控制器传递数据到另一个控制器或者从一个Action传递到另一个Action。
- 可能会如上面讨论的那样,引起一些安全隐患。
- 它需要进行类型转换和检测Null值来避免错误。
- Visual Studio中没有智能支持。
- 它提供了一个可以整合多个类型的而不需要新创建类的方式(ViewModel)。
- 它是一个对ViewModel的快速补救措施,而且需要更少的代码编写。
- Tuple 是大小固定的最多8个项目。
- 值被以item1, item2...形式记录,很难识从代码中识别变量。
- Visual Studio中没有很棒的智能支持。
在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图相关推荐
- 关于ASP.NET MVC P5中CheckBox的HtmlHelper方法的bug。
在ASP.NET MVC P5中,当你使用这样的方法输出CheckBox:<%=Html.CheckBox("checkTest")%>,在浏览器上除了你期望看到的代码 ...
- mvc模型中MySQL类_Mvc5 EF6 CodeFirst Mysql (二) 修改数据模型
1.开发环境中修改模型,在DbContext中加入静态构造函数,并设置初始化模式: staticDemoDbContext() { Database.SetInitializer(new DropCr ...
- 【初学者指南】在ASP.NET MVC 5中创建GridView
介绍 在这篇文章中,我们将会学习如何在 ASP.NET MVC 中创建一个 gridview,就像 ASP.NET Web 表单中的 gridview 一样.服务器端和客户端有许多可用的第三方库,这些 ...
- ASP.NET MVC如何使用Ajax的辅助方法
前言:前面我们已经简单的介绍过了MVC如何Jquery,因为我们如果使用Ajax的话必须要了解Jquery,这篇博客我们将大致了解一下ASP.NET MVC如何使用Ajax的辅助方法,此博客是我的读书 ...
- ASP.NET MVC 4中如何为不同的浏览器自适应布局和视图
在ASP.NET MVC 4中,可以很简单地实现针对不同的浏览器自适应布局和视图.这个得归功于MVC中的"约定甚于配置"的设计理念. 默认的自适应 MVC 4自动地为移动设备浏览器 ...
- Asp.Net MVC 模型(使用Entity Framework创建模型类)
Asp.Net MVC 模型(使用Entity Framework创建模型类) 这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework ...
- C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...
- 在ASP.NET MVC应用中开发插件框架(中英对照)
[原文] Developing a plugin framework in ASP.NET MVC with medium trust [译文] 在ASP.NET MVC应用中开发一个插件框架 I'v ...
- 在ASP.NET MVC 4中使用Kendo UI Grid
Kendo UI 是Telerik推出的一套based on jQuery 的 Framework,提供了很多控件(Menu .Grid .Combox等...), 底层以Html5 + jQuery ...
最新文章
- Microstation研发
- Algorithm之MC:基于Matlab实现通过蒙特卡洛方法模拟二维布朗运动
- 信息系统项目管理知识--项目人力资源管理
- crt linux切换用户,不同连接终端通过密钥方式登录 Linux
- c 和java通讯大小端问题处理_记录一个如何解决java与C++socket通信的大小端问题...
- Python并发编程之concurrent.futures
- python多级目录import_你真的会用Python模块与工具包吗?
- android rsa解密前面带乱码,C#rsa解密的解出来的结果乱码
- 基于visual Studio2013解决C语言竞赛题之0203格式化输出
- Linux安装gcc的四种方法
- NLP自然语言处理系列-业界前沿动态 对话式数据分析的关键技术——语义解析Text-to-SQL
- 【学习笔记】人体姿态识别
- mes系统服务器架构,MES系统三大层结构是什么
- java 求tan角度求值_知道sin、cos、tan的角度如何求值,不用计算器
- AI画图插画快捷做图
- 聚焦存储即平台,浪潮存储迎来发展新机遇
- vue项目怎么修改项目名称
- super()继承关系总结
- 哈雷监控设备的操作及升级NSG9k6G
- 架构师的工作都干些什么?!想做架构师必看!