Asp.net mvc 知多少(六)

本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可访问http://www.dotnettricks.com/free-ebooks自行下载。该书主要分为两部分,ASP.NET MVC 5、ASP.NET WEB API2。本书最大的特点是以面试问答的形式进行展开。通读此书,会帮助你对ASP.NET MVC有更深层次的理解。
由于个人技术水平和英文水平也是有限的,因此错误在所难免,希望大家多多留言指正。
系列导航
Asp.net mvc 知多少(一)
Asp.net mvc 知多少(二)
Asp.net mvc 知多少(三)
Asp.net mvc 知多少(四)
Asp.net mvc 知多少(五)
Asp.net mvc 知多少(六)

本节主要讲解模型验证以及前端的优化技术

Q61. 什么是ASP.NET MVC中的Data Annotations(数据注解) ?
Ans. Data validation(数据注解)是开发web应用程序的一个关键概念。在 Asp.net MVC中我们可以很容易通过将数据注解特性申明到Model类,既可以实现验证。Data Annotation 特性是位于System.ComponentModel.DataAnnotations命名空间下,适用于Asp.net 项目(比如Asp.net web application & website, Asp.net MVC, Web forms ),同时也适用于Entity framework ORM 模型。
Data Annotations帮助我们为model类或属性定义规则进行数据验证和显示合适的提示信息给终端客户。
Data Annotation 验证特性:

  • DataType - 为属性指定数据类型
  • DisplayName - 为属性指定显示名称
  • DisplayFormat - 为属性指定显示格式
  • Required - 限制属性为必录
  • ReqularExpression - 用正则表达式验证属性的值是否满足要求
  • Range - 限制属性的值在某一区间
  • StringLength - 指定string类型属性的最小和最大长度
  • MaxLength - 指定string类型属性的最大长度
  • Bind - 添加参数或表单数据到model属性时,指定字段将会被添加到或排除
  • ScaffoldColumn - 隐藏表单编辑界面的指定字段

Q62. Asp.Net MVC如何进行服务端验证?
Ans. 在与用户敏感信息交互之前服务端验证至关重要。不管客户端是否验证,我们在服务端都必须进行验证。用户可以通过禁用客浏览器脚本或采取其他方式来跳过客户端验证。在这种情况下,服务端的验证就必不可少,用来验证用户的脏输入来保证数据安全。
ASP.NET MVC中,在服务端有两种方式来对model进行验证:
** Explicit Model Validation (显示模型验证)**

就是使用传统的 IF..Else..IF 语句对model进行验证。用这种方式,你需要一个一个的检查要检查的属性。
如果model的属性是非期望的,在ModelState中插入错误信息。

class HomeController : Controller
{[HttpPost]public ActionResult ExplicitServer(UserViewModel model){//Write custom logic to validate UserViewModelif (string.IsNullOrEmpty(model.UserName)){ModelState.AddModelError("UserName", "Please enter your 
name");}if (!string.IsNullOrEmpty(model.UserName)){Regex emailRegex = new Regex(".+@.+\\..+");if (!emailRegex.IsMatch(model.UserName))ModelState.AddModelError("UserName", "Please enter correct 
email address");}if (ModelState.IsValid) //Check model state{//TO DO:}}
}

** Model Validation with Data Annotations (使用数据注解进行模型验证)**

Data Annotations (数据注解)是在 .NET 3.5 SP1中引入的. 有一系列的特性类定义在System.ComponentModel.DataAnnotations 程序集。Data Annotations 允许我们使用元数据修饰模型类。这些元数据描述一系列规则来对属性进行验证 :

public class UserViewModel
{[Required(ErrorMessage = "Please Enter Email Address")][RegularExpression(".+@.+\\..+", ErrorMessage = "Please Enter Correct 
Email Address")]public string UserName { get; set; }[Required(ErrorMessage = "Please Enter Password")][StringLength(50, ErrorMessage = "The {0} must be at least {2} 
characters long.", MinimumLength = 6)]public string Password { get; set; }
}

Q63. 如何判断Model State中是否有错误?
Ans. 当服务端验证有错误时,错误信息将保存在。因此通过使用
ModelState.IsValid 属性即可验证model state。

[HttpPost]
public ActionResult DoSomething(UserViewModel model)
{if (ModelState.IsValid){//TODO:}
return View();
}

Q64. 在ASP.NET MVC中如何关闭和启用客户端验证 ?
Ans. 我们可以通过设置ClientValidationEnabled &
UnobtrusiveJavaScriptEnabled在应用程序级别启用和关闭客户端验证。

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

如果需要开启客户端验证,以上两个属性都必须为true。
还可以在通过编程在代码中启用客户端验证。
修改Global.asax中的Application_Start()事件去启用关闭客户端验证。

protected void Application_Start()
{//Enable or Disable Client Side Validation at Application LevelHtmlHelper.ClientValidationEnabled = true;HtmlHelper.UnobtrusiveJavaScriptEnabled = true;

我们同时可以为某一view启用及关闭客户端验证。通过在view中的razor代码块中指定。view中的设置将覆盖应用程序级别的设置。

@using MvcApp.Models
@{ViewBag.Title = "About";HtmlHelper.ClientValidationEnabled = false;
}
}

Q65. 什么是CDN以及它有什么好处?
Ans. CDN代表内容分发网络。 它是部署在互联网上多个数据中心的服务器分发系统。 它的目的是为了向终端客户提供高可用性和高性能的内容(比如jquery,bootstrap等开源类库) 。
主要由三个流行的cdn:

// Google CDN 
<scripttype="text/javascript"src="http://ajax.googleapis.com/ajax/libs/jquery/1.9
.1/jquery.min.js"></script>
// Microsoft CDN
<scripttype="text/javascript"src="http://ajax.microsoft.com/ajax/jquery/jquery-
1.9.1.min.js"></script>
// JQuery CDN 
<scripttype="text/javascript"src="http://code.jquery.com/jquery-
1.9.1.min.js"></script>

优点

  1. 减少了客户端对自己服务器的请求数。
  2. 节省了带宽 ,且加载速度快。
  3. 自动缓存,当有一个请求从cdn中获取资源,后续有相同请求,将直接从缓存中获取。

Q66. 什么是 jquery.validate.unobtrusive.js?
Ans. 该插件是从ASP.NET MVC3引入的,通过使用组合的jquery验证和HTML5数据属性在客户端应用数据模型验证。


Q67. 介绍ASP.NET MVC中的Bundling(捆绑)和Minification (微小)?
Ans. ASP.NET MVC4 和.NET Framework 4.5 提供捆绑和微小技术来减少对服务器的请求次数以及减少请求的CSS和JavaScript的大小,从而加快页面加载时间。

A bundle是逻辑上的一组文件仅通过一次的http请求就完成加载。 可以通过调用BundleCollection类的Add()方法来为CSS和JavaScript来创建 style (样式)和 script(脚本) bundle (捆绑)。所有的捆绑都是在
BundleConfig.cs 文件中创建。

public class BundleConfig
{public static void RegisterBundles(BundleCollection bundles){bundles.Add(new
StyleBundle("~/Content/css").Include("~/Content/site.min.css","~/Content/mystyle.min.css"));bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include("~/Scripts/jquery-1.7.1.min.js","~/Scripts/jquery.validate.min.js","~/Scripts/jquery.validate.unobtrusive.min.js"));}
}

Minification是一项用来移除JavaScript和CSS文件中不必要的字符(比如空格,换号符,制表符)和注释来减小文件大小来加快网页加载速度。 有很多种工具进行微小(其中JSMin 和YUI 是最流行的两款工具) 。
下面假设我们的页面中有以下下CSS和JavaScript:

<link href="~/Content/Site.css" rel="stylesheet"/>
<link href="~/Content/MyStyle.css" rel="stylesheet"/>
<script src="~/Scripts/jquery-1.7.1.js"></script>
<script src="~/Scripts/jquery-ui-1.8.20.js"></script>
<script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>

不使用捆绑和微小,页面的加载统计

1240

使用捆绑和微小,页面的加载统计

@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/jquery")

1240


Q68. 可以在ASP.NET MVC3 或 ASP.NET4.0中使用捆绑和微小(bundling and minification)吗?
Ans. Microsoft.Web.Optimization程序集包含的System.Web.Optimization 命名空间提供了用来进行捆绑和微小的技术。引用这个程序集即可在SP.NET MVC3 或 ASP.NET4.0中使用这项技术。


Q69. Bundling(捆绑)是如何使用浏览器的缓存能力?
Ans. 浏览器缓存资源是基于URLs的。当一个web页面请求一个资源,浏览器首先去检查它的缓存是否存在资源与请求的URL匹配。如果匹配,则直接使用缓存。
因此无论合适你改变CSS和JS文件它都不会在浏览器上有反映。对于这种情形,你需要强制浏览器去刷新/加载。
但是捆绑会自动处理这种问题,通过为每一个捆绑添加一个hash code作为url的查询参数。无论何时你只要改变CSS和JS文件的内容那么就会产生一个新的hash code,并自动呈现到页面。这样,浏览器就会看到一个不同的Url,然后就会重新去获取新的CSS和JS。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396783.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

selenium选错弹出层的下拉框

要先选中这个弹出层的form元素&#xff0c;再找下拉框 public void downSelectBox(){driver.get("https://www.imooc.com/user/setprofile");driver.findElement(By.className("pull-right")).click();try {Thread.sleep(2000);} catch (InterruptedExcept…

C语言 1A gt $20,C语言输出 1到20 的阶乘之和

除了调用库&#xff0c;绝对找不到比这更精简的代码了.#include#includelong long getdata(long long n){long long sum 1;while(n){sum*n--;}return sum;}int main(){long long sum 0;long long nums 20;while(nums){sumgetdata(nums--);}printf("%lld",sum);}【…

32位PLSQL Developer无法登录Oracle 11g 64位

问题&#xff1a; Windows10 64位下装Oracle 11g 64位&#xff0c;PLSQL Developer使用出现以下问题&#xff1a; 1、Database下拉框为空&#xff1a; 2、强制输入用户名、密码及Database&#xff0c;登录弹出&#xff1a; 说明PLSQL Developer并不支持Oracle 64位客户端连接。…

c语言课程结束,【计算机】程序设计——C语言基础秋季学期课程圆满结束

2019年10月22日11&#xff1a;40&#xff0c;在同学们发自内心的掌声中&#xff0c;课外培养中心开办的程序设计——C语言基础课程圆满落幕。本次课程由计算机中心的陶媛老师予以指导&#xff0c;在短短五次课的时间里&#xff0c;同学们对学习C语言都有了更深的体悟。对于大部…

struts2获取请求参数的三种方式及传递给JSP参数的方式

接上一篇文章package test;import com.opensymphony.xwork2.ActionSupport; import javax.servlet.http.*; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import java.util.*; public class HelloAction extends ActionSup…

CentOS6.5 搭建Open***服务器

前言&#xff1a;之前搭建过程中找了5-6个教程一起看&#xff0c;真是累&#xff0c;难道就没有写的详细一点&#xff0c;一次成功的吗&#xff0c;基于此花了一下午制作了本教程&#xff0c;实际测试2遍均成功&#xff0c;懒人福音。基础环境&#xff1a;系统&#xff1a;Cent…

python如何在exel中编程_如何使用Python以编程方式将行添加到现有Excel表中

尽管有各种各样的pythonexcel操作库和资源&#xff0c;但我无法找到具体的解决方案。在 现在&#xff0c;我有一个表格存在的Excel模板文件。我想编写一个Python程序来填充这个表。对于任何现有的Excel库都可以这样做吗&#xff1f;模板Excel文件包含一个空表的工作表&#xff…

c语言文件分屏显示,通用子目录文件显示方法

通用子目录文件显示方法在用CHKDS/V对磁盘子目录及子目录文件进行查找时,由于输出显示信息没有分屏显示,很容易错过需要的信息,并且显示信息没有标记出隐藏的子目录名及子目录文件名,这样就对进一步的子目录及文件操作带来许多不便。若辅以管道操作采用CHKDSK/V:|MORE,虽然可分…

Javascript、Dom、JQuery

1、Javascript JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。 1.1 存在形式 1 1、文件形式 2 <script src"../jqu…

mysql镜像_Mysql phpmyadmin docker镜像安装

前言1.介于mysql的安装很容易出现各种坑&#xff0c;本文使用 mysql 的docker镜像2.为了方便管理mysql数据库又不暴露mysql服务&#xff0c;所以使用phpmyadmin管理pull镜像#下载mysql镜像docker pull mysql#下载phpmyadmin镜像docker pull phpmyadmin/phpmyadmin创建网络docke…

linux安装lrzsz,并使用rz sz 命令

1 centeos中使用 yum -y install lrzsz 命令下载并安装 2 使用 rz 命令将windows文件上传到linux 3 使用 sz 命令将linux文件下载到windows 例如&#xff1a; 4 tar zcvf dbq.tar.gz files/ 打包指定文件夹 5 sz dbq.tar.gz 转载于:https://www.cnblogs.com/shaner/p/6387516.h…

慈不掌兵,义不行贾,烂好人难成大业!

两个月前&#xff0c;朋友的创业公司倒闭了。 朋友是温文尔雅的白面君子&#xff0c;有着光鲜的履历和出众的能力。和他聊天&#xff0c;永远觉得沐浴春风。温润如玉&#xff0c;充满魅力。 朋友细致而体贴。他记得你的生日时&#xff0c;并在那天给发送祝福和红包&#xff1b;…

c++如何打开hdf5文件_如何打开CSV格式文件才能正常使用?

正文开始前先给大家来一波福利&#xff0c;欢迎大家扫码关注后&#xff0c;手动发送“薪酬”领取《企业薪酬管理必备资料包》&#xff01;注意&#xff1a;先扫码关注再回复回复关键词&#xff01;先扫码关注再回复回复关键词&#xff01;先扫码关注再回复回复关键词&#xff0…

Linux驱动技术(四) _异步通知技术

异步通知的全称是"信号驱动的异步IO"&#xff0c;通过"信号"的方式&#xff0c;放期望获取的资源可用时&#xff0c;驱动会主动通知指定的应用程序&#xff0c;和应用层的"信号"相对应&#xff0c;这里使用的是信号"SIGIO"。操作步骤是…

go 类型断言_(57)接口的类型断言

GO提供了一个方法&#xff0c;用来判断接口的底层值是什么类型类型断言 提供了访问接口值底层具体值的方式。t : i.(T)该语句断言接口值 i 保存了具体类型 T&#xff0c;并将其底层类型为 T 的值赋予变量 t。若 i 并未保存 T 类型的值&#xff0c;该语句就会触发一个panic。为了…

Html、CSS、JavaScript 实时效果在线编辑器 - 学习的好工具,算不算?!

关于 二维码 与 NFC 之间的出身贫贱说太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es)本文遵循“署名-非商业用途-保持一致”创作公用协议转载请保留此句&#xff1a;太阳火神的漂亮人生 - 本博客专注于 敏捷开发及移动和物联设备研究&#xff1a;iOS、Android、Html5、…

vxlan 资料及其在 neutron中的应用

2019独角兽企业重金招聘Python工程师标准>>> VXLAN 是一个新兴的SDN 标准&#xff0c;它定义了一种新的 overlay 网络&#xff0c;它主要的创造者是 VMware, Cisco 和 Arista。它被设计来消除虚拟化网络世界中的 VLAN 数目的限制。VXLAN 本身是一个多播标准&#xf…

横流式冷却塔计算风量_研讨丨卓展标准高效制冷机房技术之影响冷却塔效率的几个因素...

集中制冷用空调系统中&#xff0c;单台冷却塔的冷却水量基本上都小于1,000m/h&#xff0c;且装有淋水填料的横流机械通风开式居多。本文将已横流开式冷却塔为对象&#xff0c;探讨影响其效率的几个因素。横流开式冷却塔示意图如下所示&#xff1a;横流开式冷却塔示意图 Fig 01说…

前端解决跨域问题的8种方案

2019独角兽企业重金招聘Python工程师标准>>> 1.同源策略如下&#xff1a; URL说明是否允许通信http://www.a.com/a.js http://www.a.com/b.js同一域名下允许http://www.a.com/lab/a.js http://www.a.com/script/b.js同一域名下不同文件夹允许http://www.a.com:8000/…

k歌的录音伴奏合成技术如何实现_K歌神器,用唱吧麦克风攀登天籁高峰

自从喜欢上了手机K歌&#xff0c;经常会上传一些自己的作品&#xff0c;起初无论音质如何都是乐在其中&#xff0c;可时间久了发现回放效果确实不如那榜单上的高手&#xff0c;究其原因想到了麦克风&#xff0c;网上一搜果然有各种K歌辅助工具&#xff0c;多番对比之下&#xf…