1.什么是LINQ?
Language Integrated Query (LINQ)——语言集成查询,是一个.NET框架模块, 将本机数据查询功能连接到.net语言。它可以轻松地从各种数据源中(内存中的对象、数据库、XML文档等)访问数据。
2.在数据集中使用LINQ有什么优势?
使用LINQ的主要目的是检索数据集中的复杂查询
LINQ用于合并来自两个不同数据集的值
LINQ提供了一种比SQL查询更精确的方法来查询数据集
3.LINQ与传统的foreach循环相比具有哪三大优势
更简洁,更易读,在筛选条件比较复杂时,使用少量的代码编写更强大的筛选,
排序和分组功能无需修改或只需修改少量代码即可移植到其他类型的数据源。
4.什么是MVC/MVC工作原理
是软件工程中的一种软件架构模式,有三个组件构成,分别是:
模型Model 提供数据源,存储或者处理数据的组件
视图View,是用户和系统交互的入口,负责向用户提供显示界面
控制器Controller,处理用户交互,从 Model 中获取数据 并将数据传给指定的 View。或从视图接收用户输入,并向模型发送数据
5.MVC的优势
通过 Model、View 和 Controller 有效地简化复杂的架构,体现了很好的隔离原则。
没有使用服务器控件,所以程序员控制得更加灵活,页面更加干净。可以控制生成自定义的URL,对SEO友好。
强类型 View 实现,更安全、更可靠、更高效。让 Web 开发可以专注于某一层,更利于分工配合,适用于大型架构开发。更加简洁,更加接近原始的“请求 - 处理 - 响应”过程。
6.MVC的不足?
增加了系统结构和实现的复杂性,视图与控制器间的过于紧密的连接,视图对模型数据的低效率访问
7.视图和控制器之间数据传递有哪几种方式
1. ViewData字典 2. 动态型ViewBag 3. 动态类型Model 4. 临时存储TempDate
8.MVC中的TempData\ViewBag\ViewData区别
三者都是用来向视图传递数据的
ViewData是字典类型 Dictionary,通过键值对方式设置值和取值,使⽤时需要类型转换。
ViewBag 是基于 dynamic 的动态类型,是ViewData的扩展
TempData 是临时存储,值取了一次后会自动删除。
ViewBag和ViewData只在当前Action中有效, ViewBag⽐ViewData慢,ViewBag存dynamic类型数据,使⽤时不需要类型转换;而TempData 可以在不同的 Action 中进行传值
9.什么是razor view engine(razor视图引擎)?
Razor 是 ASP.NET MVC 3.0 出现的新的视图引擎,为视图提供了精简的语法,最大限度地减少了语法和额外字符串。Razor 不是编程语言,而是服务器端标记语言,是一种允许用户向网页中嵌入基于服务器代码 (Visual Basic 和 C#)的标记语法。使用@符号显示表达式,引用命名空间@using、模型声明@model、编写服务器C#代码,注释。这个引擎还提供了数据绑定的显示模板。
@model MvcStore.Models.Customer
@{ViewBag.Title="Get Customers";}
<div class="cust"><h3><em>@Model.CustomerName</em></h3></div>
Partial view部分视图,相当于传统⽹⻚表格中的user controls 用户控件.
布局页需要合并多个子视图,这就需要使用部分视图技术,主要⽬的是为了重复使⽤这些视图。
在布局页中定义部分视图@RenderSection("名称", required: false)
在内容页中使用 @section 名称{Html内容}
11.MVC的Action有多少种不同的结果类型
有多种返回类型,最主要的是ActionResult类,它是⼀个抽象基类,有一些⼦类型,如:
ViewResul返回一个视图 return View()
RedirectResult 返回一个跳转 return RedirectToAction("Index");
JsonResult 返回一个json对象 return Json()
ContentResult 返回一个内容字符串。Return Content()
12.MVC的路由什么,在哪⾥写路由映射表
路由帮你定义⼀个URL规则,映射URL到控制器。
在应用程序全局文件“global.asax”中注册路由;在RouteConfig.cs内部设置默认路由或自定义路由规则
13.MVC模型验证
MVC模型验证是在模型绑定时,检查从HTTP请求接收的数据是否合格,以保证数据的有效性,在收到无效数据时给出提示,帮助用户纠正错误的数据
1)修改Models目录中实体类的属性上添加验证标签
非空验证:[Required(ErrorMessage = "必须填写")]
正则表达式验证:[RegularExpression(@"\d+$")]
[RegularExpression(@"^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$", ErrorMessage = "请输入正确的电子邮箱地址!")]
范围验证:[Range(18, 100, ErrorMessage = "{0}最大值不能超过{2},最小值不能小于{1}")]
[Range(typeof(decimal), "0.00", "99.99")]
[Range(18,100)]
[Display(Name = "简介:")]
字符串长度验证:[StringLength(10, ErrorMessage = "最大长度不超过10个字符")]
[StringLength(10,MinimumLength=4]
比较验证:[System.ComponentModel.DataAnnotations.Compare("Password")]
Compare模型验证:用于确保模板对象的两个对象拥有两个相同的值
2)在页面中添加验证脚本
<script src="~/Scripts/jquery-1.8.0.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
Scripts目录中没有对应脚本库可以用NuGet程序包管理工具添加, jquery.unobtrusive程序包
3)修改视图表添加Html.ValidationMessageFor验证方法
@Html.ValidationMessageFor(m => m.Id)
Remote验证:自定义验证
Remote允许利用服务器端的回调函数执行客户端的验证逻辑。需要引用命名空间:System.Web.Mvc。
一般是:用户名是否重复验证,用户编号查询,余额检测
实体类属性上添加特征
[Remote("CheckId","Home")]
控制器中加入如下Action
public JsonResult CheckId(string id)
{
bool result = true;
if(id =="1001"||id=="1002"||id=="1003")
{
result = false;
}
return Json(result, JsonRequestBehavior.AllowGet);
}
视图中使用
14.ASP.NET MVC的过滤器有哪些
MVC的每⼀个请求,都会分配给相应的控制器和对应的⾏为⽅法去处理,⽽在这些处理的前前后后如果想再加⼀些额外的逻辑处理。这时候就⽤到了过滤器。
MVC⽀持的过滤器类型有四种,分别是:Authorization(授权),Action(⾏为),Result(结果)和Exception(异常)。
15.post、get 的区别
- get 的参数会显示在浏览器地址栏中,而post 的参数不会显示在浏览器地址栏中;
- 使用post 提交的页面在点击【刷新】按钮的时候浏览器一般会提示“是否重新提交”,而get 则不会;
- 用get 的页面可以被搜索引擎抓取,而用post 的则不可以;
- 用post 可以提交的数据量非常大,而用get 可以提交的数据量则非常小(2k),受限于网页地址的长度。
- 用post 可以进行文件的提交,而用get 则不可以。
16.Http 状态码各是什么意思。
200:请求成功
301:永久重定向
302 :重定向
400:语义错误请求参数错误
403 服务器已经理解请求,但是拒绝执行它
404 :访问的资源不存在
409:服务器冲突
500:服务器内部错误
AJAX 解决的问题就是“无刷新更新页面”,用传统的HTML 表单方式进行页面的更新时,每次都要将请求提交到服务器,服务器返回后再重绘界面,这样界面就会经历:提交→变白→重新显示这样一个过程,用户体验非常差,使用AJAX 则不会导致页面重新提交、刷新
18.什么是JSON对象?
JSON全称是JavaScript Object Notation,是一种轻量级的数据交换格式,以键/值对方式存储数据。
JSON 与XML具有相同的特性,是一种数据存储格式,但是JSON相比XML 体积更小,传输速度更快,更易于人编写和阅读,更易于生成和解析。
19.多态一般可以使用哪三种形式实现
- 虚方法 2. 抽象方法 3.接口方法
20.什么情况使用扩展方法
当我们需要对某个类的原有的功能进行扩展,但没有源代码时,可以对原类添加扩展方法
21.委托是什么?
将方法当作参数传入另一个方法的参数,即委托就是某些方法的代理。
22.NET默认的委托类型有哪几种?
Action < T >泛型Action委托表示引用一个void返回类型的方法
Func< T >Func调用带返回类型的方法
23.泛型的优点有哪些?
代码的可重用性。无需从基类型继承,无需重写成员,扩展性好,安全性高
24.抽象方法和虚方法的区别?
抽象方法一定是虚方法,虚方法未必是抽象方法。
抽象方法 | 虚方法 |
使用abstract关键字定义 | 使用virtual关键字定义 |
只能被定义在抽象类中 | 可以定义在除密封类以外的类中 |
不允许有方法体 | 必须有方法体 |
派生类必须重写抽象方法 | 派生类可以根据需要是否重写 |
25.什么是装箱和拆箱?
装箱就是隐式地将⼀个值类型转换成引⽤类型,如:int i=0; Syste.Object obj=i;
拆箱就是将引⽤类型转换成值类型,如: int i=0; System.Object obj=i; int j=(int)obj;(将obj拆箱)
装箱与拆箱性能消耗较大,要减少装箱、拆箱操作
26.面向对象编程三大特征
封装、继承、多态
27.接口是什么
interface 纯粹的抽象类,制定规则的集合。只包含方法、属性、事件等抽象成员,不能包含字段等数据成员。成员必须在派生类中全部被实现。
28.lambda表达式是什么?
Lambda表达式以一种更为方便的语法把功能实现代码赋予委托,其本质是一个匿名函数。Lambda表达式只能与委托配合使用,只要有委托类型参数的地方就可以使用Lambda表达式。语法:(参数列表)=> { 代码实现 }
29.如何对页面数据进行验证?
验证脚本和远程验证、模型验证
30.如何对未授权页面进行拦截?
自定义授权过滤器
31.图片保存到数据库中采用什么方式?
base64