您的位置:首页 > 房产 > 建筑 > 软件技术专升本需要考些什么科目_软文营销名词解释_教程推广优化网站排名_整合营销名词解释

软件技术专升本需要考些什么科目_软文营销名词解释_教程推广优化网站排名_整合营销名词解释

2025/3/18 0:00:29 来源:https://blog.csdn.net/cao919/article/details/146230296  浏览:    关键词:软件技术专升本需要考些什么科目_软文营销名词解释_教程推广优化网站排名_整合营销名词解释
软件技术专升本需要考些什么科目_软文营销名词解释_教程推广优化网站排名_整合营销名词解释

本文涉及ASP.NET Webform和ASP.NET MVC 后台开发大概80%技术

2019年以前对标 深圳22K左右  广州18K左右  武汉16K左右
那么有人问了2019年以后的呢? 答:吉祥三宝。。。
So 想继续看下文的 得有自己的独立判断能力。

C#.NET高级笔试题 架构 优化 性能提升 2024 金九银十 最新 资深 八股文-CSDN博客

MySQL面试题 2024 金九银十 最新 C# 高级 资深 DB 八股文-CSDN博客

国产精品ORM框架-SqlSugar详解 SqlSugar初识 附案例源码 云草桑 专题一_sqlsuger进阶-CSDN博客

C#高级开发 线上面试题20240711_c# 开发高级面试题-CSDN博客

Redis高频面试题-CSDN博客

数据库SqlServer笔试题_sqlserver 笔试题-CSDN博客

WPF 2024 金九银十 最新 高级 架构 面试题 C#_wpf 面试题-CSDN博客

WPF UI交互专题 界面结构化处理 查看分析工具Snoopy 逻辑树与视觉树 平面图像 平面图形 几何图形 弧线 01_wpf逻辑树和视觉树代码-CSDN博客

C#.NET Core 笔试题 架构 优化 性能提升 2024 金九银十 最新 资深 八股文-CSDN博客_net core笔试题-CSDN博客

ASP.NET 框架技术

第一章C#语言新特性 

自动属性 

可空类型(可以为空的值类型) 

泛型类 

对象初始化器 

集合初始化器 

var关键字 

匿名类型 

扩展方法 

匿名类型和Lambda表达式 

分部类 

第二章 Linq查询知识点详解 

Linq标准查询语法格式 

使用Linq进行数据查询的条件 

Where关键字 

Select关键字 

Count()方法 

Max()和Min() 

First()和FirstOrDefault() 

Average()方法 

Linq的联合查询 

Sum() 

OrderBy()和OrderByDescending() 

group by分组 

其他: 

第三章 Linq To Sql 

Linq及其扩展 

Linq To Sql简介 

Linq To Sql设计器 

DataContext数据库上下文类的常用属性和方法 

Linq To Sql常用操作 

新增数据 

修改数据 

删除数据 

数据查询 

典型应用场景 

场景1:服务器获取动态表单数据 

场景2:使用Linq To Sql进行分页 

场景3:在分层中如何使用Linq To Sql 

其他 

第一章ASP.NET MVC绪论 

MVC与ASP.NET MVC基础概念 

MVC三大组件的相互关系 

ASP.NET Webform模型和ASP.NET MVC模型的关系 

ASP.NET MVC中的约定 

其他 

ASP.NET MVC进阶一 

控制器相关 

视图相关 

其他 

ASP.NET MVC进阶二 

数据验证 

数据验证的步骤 

常用的验证标记 

与验证相关的js文件 

验证相关的Html辅助方法 

在服务器端判断模型是否通过了验证(服务器端验证) 

Action与View的数据传递 

ViewData 

ViewBag 

TempData 

ActionResult的实现类 

ViewResult 

ContentResult 

RedirectToRouteResult 

RedirectResult 

JsonResult 

PartialViewResult 

FilePathResult 

FileContentResult 

FileStreamResult 

EmptyResult 

HttpStatusCodeResult 

其他 

ASP.NET MVC进阶三 

ASP.NET MVC中的AJAX应用 

Ajax.ActionLink 

Ajax.BeginForm 

其他 

ASP.NET MVC进阶四 

ASP.NET MVC中使用母版页 

ASPX视图引擎的母版页功能 

Razor视图引擎 

Razor基本语法 

Razor视图引擎中母版页的用法 

Html.RenderSection() 

Razor视图中如何自定义辅助方法 

在ASP.NET MVC中如何实现模块化开发? 

ASP.NET MVC数据分页 

其他 

ASP.NET MVC进阶五 

重写Controller类的虚方法 

OnActionExecuting\OnActionExecuted 

OnResultExecuting\OnResultExecuted 

OnAuthorization 

OnException 

ASP.NET MVC中的过滤器 

IAuthorizationFilter 

IActionFilter 

IResultFilter 

IExceptionFilter 

ASP.NET MVC扩展案例 

1.ASP.NET MVC中使用富文本编辑器 

2.ASP.NET MVC中如何使用模态对话框 

3.ASP.NET MVC中如何实现通用弹框功能 

4.数据验证Remote的扩展应用: 

5.ASP.NET MVC中实现多文件上传 

6.ASP.NET MVC应用程序自动发布 

7.ASP.NET MVC中实现通用权限管理模块 

第一章C#语言新特性

自动属性

下面两种写法作用相同.前者属于自动属性.在使用自动属性时应该注意:get和set访问器不能有具体的实现.

           

           

可空类型(可以为空的值类型)

对于值类型而言,C#规定:在定义变量的同时必须要对其赋初值,否则可能无法通过编译器的编译.但是在某些情况下,用户事先是不知道变量的初始值是多少的.因为可以为空的值类型就显得很重要.

  1. 值类型包括:int\double\float\decimal\bool\char
  2. 可为空的语法为:Nullable<T>,其中T指代上面具体的某种值类型

比如,可以为空的int类型:Nullable<int>;可以为空的bool类型:Nullable<bool>

  1. 可以为空的变量,在赋值时,可以将null赋值给它.

例如:Nullable<int>  age  =  null;

  1. Nullable<T>可以简写为:T?

例如: Nullable<int> age = null;等价于int? age = null;

  1. 下面两种写法都是错误的.

string? name = null;  Student? Stu = null;

因为string和Student都是引用类型.

  1. 可空值类型的常用属性:
  1. HasValue:布尔类型,如果字段不为null返回true,否则返回false.
  2. Value:获取字段的值,如果该字段的值为null,那么调用Value属性会报错

泛型类

List<T>:T可以指代任何类型,比如:int\bool\string\Student\...

Dictionary<T, K>:字典类,其中T和K可以指代任何类型

KeyValuePair<Tkey, Tvalue>:键值对类型

对象初始化器

利用对象初始化器,在实例化一个类对象的同时可以为它的属性赋值.

集合初始化器

利用集合初始化器,可以在实例化一个集合对象时为它指定元素

var关键字

var用于定义变量,变量的类型根据值来确定.

var  a  = 5; 因为5是int类型,所以a的类型也是int

var  stu  =  new  Student();因为通过new创建的是Student类型的变量,所以stu是Student类型.

注意1:var b;这种写法是错误的.原因是由var声明的变量,必须在定义的同时就赋初值.

注意2:通过var声明的变量一旦实例化后,就不能再更改它的数据类型.例如下面的代码:

var  a  =  5;  a  =  “zhangsan”;//a=”zhangsan”报错

匿名类型

在实例化一个类对象时,可以无须事先定义该类,通过new{}即可动态创建类对象.

扩展方法

扩展方法是指:为以前定义好的类扩展其他方法.具体步骤如下:

  1. 首先,定义一个静态类(类的名称没有限制)
  2. 其次,在静态类中定义一个静态方法(方法返回值根据实际情况自定定义)
  3. 最后,给上述静态方法添加一个参数,且该参数必须被this关键字修饰.

注意:  上面被this关键字修饰的参数的类型就是该扩展方法所扩展的类型

下面的代码演示了如何为string类扩展名称为Convert的无参方法.

匿名类型和Lambda表达式

  1. 什么是委托:委托允许将一个方法作为参数,传递给另外一个方法.

下面的代码演示了如果使用委托计算2个数字的加法\减法\乘法.

委托和挂载的方法:参数个数\参数类型\参数顺序\返回值类型必须要一致.

  1. 但是上述方式,使用很复杂.我们可以通过匿名方法来简写上述功能.=符号右侧的就是匿名方法.
  1. Lambda表达式也是匿名方法的一种.并且它的语法更加简洁明了.

Lambda表达式分3部分  :   参数   |   =>   |    表达式

下面的代码演示了如果使用Lambda表达式改写委托的示例.其中3个粉色的线框就是Lambda的3部分.

注意1:如果Lambda表达式只有1个参数,那么参数部分可以不用()包裹

注意2:Lambda表达式部分可以使用{}包裹,也可以不包裹.如果有多行代码,必须要使用{}包裹起来.

  1. 在出现委托(Func参数)的地方,我们就可以写Lambda表达式.

Func<T, K>是一个泛型委托.该委托的参数类型为T,返回值类型为K.

Lambda表达式的参数arg的类型为T,Lambda的表达式部分返回值类型为K.

分部类

分部类允许将一个类的定义拆分到多个文件中.Winform应用程序和ASP.NET Webform应用程序中的每一个窗体所对应的后台类就采用了分部类技术.

分部类的语法就是:在类声明时,在关键字class前添加partial关键字.

下面的代码将名称为Person的类拆分到了2个类文件中,分别是:Person.cs文件和PersonExt.cs文件.

  

第二章 Linq查询知识点详解

Linq标准查询语法格式

var data = from  变量  in  集合对象 

            where  布尔表达式

     orderby  排序字段  descending|ascending

            select  变量;

解释:

select:提取要查询的数据                 where:筛选满足条件的元素   

from 变量:该变量指代集合中的单个元素   in:从哪里筛选元素

orderby:排序                          descending:降序  ascending:升序

注意:where是可选的,如果不加where则表示筛选所有元素.

示例代码:

使用Linq进行数据查询的条件

数据源(in 后面的集合对象)必须直接或间接继承自IEnumerable<T>

或者说:只要数据源继承自IEnumerable<T>,我们就可以使用Linq从它里面检索数据

Where关键字

筛选满足条件的元素,where关键字后面一定要跟布尔表达式

Where后面的布尔表达式可以很简单,也可以是复杂的表达式.

注意:

注意from关键字后面可以出现多个where表达式,这些表达式之间是并且的关系

Select关键字

Select关键字用于提取要查询的数据.

Select后面可以直接跟from后面的变量;也可以跟一个匿名类型.

Count()方法

Count(expression<Func<T, bool>>)

解释:T代表Lambda表达式中的参数部分,bool代表Lambda表达式部分为布尔类型

Count方法用于获取满足条件的记录数量(有多少个满足条件的记录)

Max()和Min()

Max(Expression<Func<T, K>>)和Min(Expression<Func<T, K>>)

Max:求最大值    Min:求最小值

First()和FirstOrDefault()

First(Expression<Func<T, bool>>)

FirstOrDefault(Expression<Func<T, bool>>)

两个方法都是从集合中筛选满足条件的第一个元素.

区别:当没有从集合中筛选到满足的条件的元素时,First将会报错,FirstOrDefault则不会报错.

Average()方法

该方法用于计算平均值

Linq的联合查询

将两个集合进行关联,然后从这两个集合中提取所需要的数据.

语法格式:

var  data  =  from  变量1  in  集合1

               from  变量2  in  集合2

               where  变量1.属性  ==  变量2.属性

               select  new { ...  ...}

提示:可以将N个集合进行关联(N>=2)

示例代码:

Sum()

Sum(Func<T, K>)

其中T为参数的类型,K为返回值的类型.

Sum()方法用于对数据进行求和运算.

OrderBy()和OrderByDescending()

这两个方法用于实现对数据进行排序(升序和降序)

group by分组

分组的标准语法:

var  data  =  from  变量1  in  集合对象

               group  变量1  by  变量1.属性  into  变量2

               select  变量2;

注意:使用group by分组后,将不能使用之前的变量1,需要通过into关键字定义一个新的变量2.新的变量指代的是分组后的每一组.

关于分组的示例

其他:

  • 在进行数据查询时,.net framework为我们提供了2套方案:

一种是使用标准的linq查询语法=>

(from\in\select\where\orderby\ascdening\descending\group\by\into\join);

另一种方案是使用扩展方法=>

(Where\Select\FirstOrDefault\Count\Sum\Average\Max\Min\OrderBy\OrderByDescending\GroupBy\Last\LastOrDefault)

当然,我们也可以将2种混合起来使用.

  • 其他常用扩展方法

Intersect:取两个集合的交集             Union:取两个集合的并集

Except:去两个集合的差集                 Reverse:反转序列中元素的顺序

ForEach:遍历集合中的元素

第三章 Linq To Sql

Linq及其扩展

Linq是一种数据查询语言(它能够从多种数据源中查询数据). 现在基于Linq的扩展有:

  1. Linq To Object:主要是从内存对象中查询数据
  2. Linq To Sql:主要是从MS Sql Server数据库中操纵(查询\新增\修改\删除)数据
  3. Linq To XML:主要是从XML片段或XML文档中查询数据

Linq To Sql简介

Linq To Sql是一个微软在.NET Framework 3.5中推出的一款ORM(Object  Relation  Model)实体框架.一个好的实体框架除了能够将数据表映射为实体类,还应该支持使用面向的思想去操纵关系型数据库.现在比较流行的ORM框架包括:Linq To Sql\Entity Framework\Nhibernate等.

我们在使用Linq To Sql的过程中,很少去手写SQL语句就能实现常见的数据增删改差操作.但是它的底层实现仍然是Ado.net.那么如何检测Linq To Sql生成的SQL语句呢?通过DataContext的Log属性即可实现检测功能.

Linq To Sql设计器

在服务器资源管理器中通过拖拽的方式,将数据表放置到Linq To Sql的设计器区域后,VS会自动将这些数据表生成N+1(N为数据表的个数)个类.这些类大致可以分为2种:一种是数据库上下文,另一种是实体类.数据库上下文类就是名称以DataContext结尾的类,它继承自Sytem.Data.Linq.DataContext.

他们的作用分别是:DataContext类用于和数据库交互(增删改查),每次进行数据库操作时,都应该先创建该类对象;

而每一个实体类则和数据表相对应.

DataContext的特性标记为Database,表示与数据库相关

实体类的特性标记是Table,表示与数据表相关

实体类中属性的特性标记是Column,表示与数据列相关

DataContext数据库上下文类的常用属性和方法

CreateDatabase():创建数据库

DeleteDatabase():删除数据库

DatabaseExits():判断数据库是否存在

Log:该属性用于检测和写入LINQ TO SQL生成的SQL语句

Linq To Sql常用操作

新增数据

void  InsertOnSubmit():实现每次新增1条记录

void  InsertAllOnSubmit():实现一次新增多条记录

注意:调用InsertOnSubmit后,一定要再调用DataContext.SubmitChanges();

修改数据

首先,查询到要修改的元素

其次,改变元素相应的属性

最后,调用dataContext.SubmitChanges()

删除数据

首先,查询到要删除的元素

其次,调用void DeleteOnSubmit()删除单个元素,如果要删除多个可以调用void DelteAllOnSubmit()

最后,调用dataContext.SubmitChanges();

数据查询

数据查询时,有2种常用的使用方式.一种是使用linq的标准语法;一种是使用Lambda表达式扩展方法.

单表查询:

多表查询:

典型应用场景

场景1:服务器获取动态表单数据

做法一:

做法二:

上述两种做法都可以实现功能.做法一是先实现工资模版的新增,然后再新增工资条目.做法二是向工资模版对象中添加多个工资条目,然后向数据库提交工资模版.

需要注意的是,做法一中为工资条目对象设置了工资模版ID,而做法二并没有为工资条目设置工资模版ID.但为什么最后效果却是一样的呢?

因为我们将工资条目添加到工资模版对象中时,linq to sql会自动将主外键关系的字段赋值.

场景2:使用Linq To Sql进行分页

分页功能需要使用两个函数进行组合:Skip()和Take()

Skip(int count):跳过count条数据

Take(int count):从开始位置提取count条记录

分页查询: dataContext.XXX.Skip(pageIndex * pageSize).Take(pageSize)

pageIndex是要提取的第几页记录.pageIndex >= 0

pageSize是每页显示的记录条数

场景3:在分层中如何使用Linq To Sql

Linq To Sql是ADO.NET的一种替代方案,而ADO.NET属于数据层的范畴,因此应该将Linq To Sql添加到数据层.又因为Linq To Sql生成的类既包括了DataContext,又包括了实体类,所以如果要利用Linq To Sql生成的实体类,就需要将这些实体类剪切到实体层中,然后在向DataContext中添加实体层的引用即可.

当然,我们也可以不将Linq To Sql生成的实体类剪切到实体层中,那么这样我们就需要额外重新编写实体层需要的实体类.

其他

  • EntitySet<T>:该类表示数据实体的集合
  • System.Data.Linq.Table<T>:该类表示数据表对象
  • 如何判定通过Linq To Sql进行数据的修改\删除\新增是否成功?

因为InsertOnSubmit方法和DataContext.SubmitChanges()方法都没有任何返回值,所以无法通过他们判断出是否操作成功.判断的标准就是:如果不抛出异常就成功,抛出异常肯定就失败了.

  • 对于标识列(自动生成列)而言,在调用DataContext.XXX.InsertOnSubmit()后是无法获取标识列的值的;只有在调用DataContext.SubmitChanges()后方能获取标识列的值.
  • 在项目中,我们可以利用VS提供的Linq To Sql设计器,快速的生成DataContext和实体类.也可以手写相应的类代码.在这里推荐大家使用VS提供的Linq To Sql设计器,因为它更加方便快捷,基本都是通过拖拽的方式就实现我们想要的效果.除非设计器生成的代码不满足你的要求,我们才会采用第二种方案.

第一章ASP.NET MVC绪论

MVC与ASP.NET MVC基础概念

MVC是Model-View-Controller的缩写.

MVC将应用程序划分为3大组件:模型\视图\控制器.

MVC不是ASP.NET所特有,它只是一种开发理念.java中的struts2也是一种MVC模型.

ASP.NET MVC从2008年发布1.0版以来,截至2014年ASP.NET MVC最新版本已经是5.0.

ASP.NET MVC从1.0版开始,就已经开放源代码(源码地址:aspnetwebstack.codeplex.com).

ASP.NET MVC官网地址:http://www.asp.net/mvc

ASP.NET MVC 模式 | .NET

MVC三大组件的相互关系

  • 在控制器中可以直接调用视图和模型
  • 在视图中可以调用模型.
  • 模型不能调用视图
  • 模型能够限定视图中使用的数据,但视图中使用的模型应由控制器提供
  • 在视图中可以调用控制器(通过视图中表单的提交和点击超链接的方式调用)

ASP.NET Webform模型和ASP.NET MVC模型的关系

二者都是基于ASP.NET Web框架构建的开发模型.所以ASP.NET中的一些功能可以被二者公用.

Webform编程模型是典型的以事件驱动的web模型,而MVC则不是.

Webform的URL地址是基于文件系统的,而MVC则是基于Action.

ASP.NET MVC中的约定

  • 所有的控制器必须放到Controllers文件夹下
  • 所有的控制器类名必须以Controller结尾
  • 所有的模型应该放到Models目录下
  • 所有的视图文件都应该放到Views目录下.
  • 所有的控制器类都应该继承自Controller类(本质上是要继承Icontroller接口)
  • 在控制器类中的public方法被成为Action(行为)
  • 如果在相应的视图目录中没有找到视图文件,那么会寻找Views\Shared目录下名称相同的视图文件
  • 在Action中return view(),默认会返回和Action名称一样的视图文件.
  • 在Global.asax全局应用程序类中注册了默认路由(名称为Default),默认路由指定了Controller默认为Home,Action默认为Index,参数id为可选参数.所以在URL地址中如果不输入controller默认访问Home控制器;如果不输入action默认访问名称为Index的action.
  • http://localhost:54321/   解释:

根据默认路由规则,等价于 => http://localhost:54321/Home/Index

  • http://localhost:54321/Home/Index/5  解释:

数值5会自动映射到action中名称为id的参数中。

  • Http://localhost:54321/Home/Index/5?name=jack&age=20   解释:

其中参数包括id、name和age三个

其他

在视图文件中,有一个名称为Model属性,它指代的是从Action中传递的模型数据.为了使用模型数据,我们还需要在<%@Page  %>指令的Inherits属性中设置模型数据的类型.

ASP.NET MVC进阶一

控制器相关

  • 在Controller类中方法访问级别为public的方法,就是行为(Action).
  • 如果不希望Controller类中的方法成为Action(可以在地址栏中被访问),有两种实现方式:
  1. 将方法的访问级别设置为private
  2. 在方法上添加特性标记[NonAction]

  • 诸如新增\修改等功能模块,我们往往会创建2个名称相同的Action:一个action用于加载新增\修改页面;另一个action用于处理新增\修改页面提交的表单数据.那么如何区分在何时调用哪个action呢?

我们将加载新增|修改页面时被调用的action,添加[HttpGet]特性标记;将处理页面提交的表单数据时调用的action,添加[HttpPost]特性标记.

下面的示例代码演示了如何实现学生的新增(action相关的代码).

  • 如何在Action中获取表单提交的数据?

表单中提交的数据,可以通过Action的参数进行映射.

映射的前提条件:Html标记的name属性值和action中参数的名称要一致.

下面的示例代码演示了映射的过程(注意粉色框标记的部分):

  • Action中如何映射复杂对象?

对于上面的映射代码,我们还可以有另外一种等价的写法,就是将映射的属性定义到一个实体类中,这样我们就可以在action中添加该实体类型的参数,参考代码如下所示:

  • 如何从一个Action中跳转至另外一个Action?

新增或修改功能完成后,需要跳转至数据列表页面,我们可以通过如下代码实现:

代码 => return RedirectToAction(“ActionName”, “ControllerName”).

视图相关

  • 在ASPX视图引擎中,可以使用asp服务器控件,但它的作用仅仅局限与生成html代码,而不推荐开发人员使用asp控件的事件.因此建议开发人员手工编写Html标记。

但是手写Html标记比较耗费时间,有没有更好的解决方案?答案就是使用Html辅助方法。

  • Html辅助方法

Html辅助方法的作用就是通过调用C#方法的方式,快速的生成相应的html标记.

Html辅助方法分为2大类:弱类型html辅助方法和强类型html辅助方法.

其中以For关键字结尾的都是强类型的辅助方法.下面的示例代码演示了二者的调用方式,以及生成的html源码。

注意:Html辅助方法有很多种重载形式,在开发过程中可以根据实际需要自行选择.比如要实现一个包含class\style\onchange属性和事件的单行文本框,可以参考如下代码:

强调:如何使用HTML辅助方法生成form标记?

生成form标记的两个Html辅助方法为:Html.BeginForm()和Html.EndForm(),但他们在使用时和其他的Html辅助方法有所不同,下面的示例代码演示了它们的两种用法:

  • 如何在URL地址中传递参数?

场景一:将学生ID值映射到名称为id参数上

场景二:将学生ID值映射到名称为stuId参数上

场景三:url地址中包括stuId和name两个参数

这三种场景的使用代码如下所示:

其他

  • 在实际开发过程中,一个小的功能模块就对应一个控制器.比如学生信息管理就是一个控制器,新增学生\修改学生\查询学生列表\删除学生都可以对应控制器中的Action.
  • 常用Html辅助方法汇总

弱类型

强类型

单行文本框

Html.TextBox()

Html.TextBoxFor()

多行文本框

Html.TextArea()

Html.TextAreaFor()

密码框

Html.Password()

Html.PasswordFor()

复选框

Html.Checkbox()

Html.CheckBoxFor()

单选按钮

Html.RadioButton()

Html.RadioButtonFor()

下拉列表框

Html.DropdownList()

Html.DropdownListFor()

平铺列表框

Html.ListBox()

Html.ListBoxFor()

Label

Html.Label()

Html.LabelFor()

Form表单

Html.BeginForm()     Html.EndForm()

超链接

Html.ActionLink()

  • 如何在视图中使用下拉列表

第一步:在action中构造好下拉列表中需要的数据,数据的类型为IEnumerable<SelectListItem>。

第二步:将构造好的数据放到Controller中的ViewData(ViewBag|TempData)属性中。

第三步:在视图view中使用Html.DropDownList辅助方法来生成下拉列表,而绑定的数据可以使用视图View中的ViewData来获取(换句话讲就是,Controller中放置到ViewData的数据,可以在视图View中的ViewData属性中提取)。

在视图中使用Html.DropDownList绑定Ienumerable<SelectListItem>

ASP.NET MVC进阶二

数据验证

数据验证的步骤

        1. 在模型类中添加与验证相关的特性标记
        2. 在客户端导入与验证相关的js文件和css文件
        3. 使用与验证相关的Html辅助方法
        4. 在服务器端判断是否通过服务器端验证

常用的验证标记

  • Required:非空验证
  • StringLength:验证字符串的长度
  • RegularExpression:正则表达式验证
  • Compare:比较两个字段的值是否相等
  • Range:范围验证
  • Remote:服务器验证(需要在controller中编写返回值为JsonResult的Action)
  • 自定义验证标记

与验证相关的js文件

在ASP.NET MVC中提供了2套验证框架,分别是微软验证框架和jquery验证框架.默认启用了jquery验证框架.

注意:这些js文件的顺序不能颠倒;其中Site.css文件中定义了数据验证使用的样式.

验证相关的Html辅助方法

注意:1.必须使用Html.ValidationMessage()和Html.ValidationMessageFor()来显示验证失效的提示信息;

2.被验证的控件(如文本框\下拉列表框等)必须使用Html辅助方法生成才有效.

在服务器端判断模型是否通过了验证(服务器端验证)

页面中如果使用了MVC验证功能,那么在后台对应的Action中必须通过ModelState.IsValid判断是否通过了服务器端验证。只有通过了服务器端验证,才能执行其他的业务逻辑代码。

使用要点:

  1. 被验证的标记不能是纯html,必须使用相应的html辅助方法

例如:Html.TextBoxFor(model=>model.UserName),则验证有效;

     <input type=”text” id=”UserName” name=”UserName” />,则验证无效;

  1. 必须使用相应的html辅助方法显示验证消息(Html.ValidationMessage)
  2. 被验证的控件必须放在有html.beginform的辅助方法内部(不能是纯<form>标记).
  3. 客户端验证是不安全的,容易被禁用或欺骗,所以一定要在服务器端判断ModelState.IsValid是否为true.

Action与View的数据传递

在某些情况下,视图需要显示多份数据(比如被修改的员工信息\岗位列表\部门列表),但是Action在返回视图时,View()方法只能传递1个object类型的数据,那么其他的数据该如何传递?

ASP.NET MVC为我们提供了3种方案:ViewData\TempData\ViewBag.

重要提示:在Controller和View中都有这三个属性,在Controller的相应属性中存放了数据后,就可以在View的相应属性中提取这些数据。

ViewData

ViewData是一个字典类型.向里面添加数据时要以键值对的形式添加.

首先在Action中向ViewData中添加,其次就可以在View中访问ViewData来提取数据.

ViewBag

ViewBag是一个动态类型的属性。在ASP.NET MVC 3.0中才加入了ViewBag属性.

动态类型:dynamic,就是可以事先不为其定义属性,通过直接给属性赋值的方式就可以随时为它添加新的属性.

下面的代码演示了向ViewBag中存放cls和stu两个对象,这两个对象分别放到了属性ClassInfo和StudentInfo中。

TempData

TempData的用法和ViewData很相似,都是字典类型.那他们的区别是什么?

ViewData中存储的数据仅仅对本次访问的当前action有效.而TempData中存储的数据,除了对本次访问的当前action有效外,还对本次访问的其他action有效(比如在Action1中向TempData中存放了数据,即使从Action1跳转至Action2后,仍然可以在Action2中从TempData提取数据。而ViewData和ViewBag都无法做到这一点).因此,TempData中数据的生命周期比ViewData|ViewBag中的生命周期要长.

ActionResult的实现类

在ASP.NET MVC模型中,Action用于响应用户的各种请求,比如向客户端返回html文档、html片段、json数据、纯文本、文件等结果。在ASP.NET MVC中通过在Action(行为或操作)方法中返回ActionResult类型的对象来实现向客户端响应上面的各种结果。

ActionResult类是个抽象类(抽象类无法直接被实例化).

ActionResult有很多实现类,不同的实现类用于响应客户端不同的结果。并且在Controller类中提供了大量的辅助方法,这些辅助方法可以快速的创建各种ActionResult.

在实际开发中,我们更多的是使用Controller类中的辅助方法,而非自己手工创建ActionResult的实现类。

ViewResult类

ViewResult类的作用是向客户端响应View目录中一个视图文件.

Controller类中提供了View()方法,来快速的返回一个ViewResult类对象.

ContentResult类

该类用于向客户端返回一段文本内容(纯文本\HTML...).

在Controller类中的辅助方法为:Controller.Content(string  content);

RedirectToRouteResult类

该类的作用是从当前action跳转至其他action.

在Controller类中的辅助方法为:RedirectToAction(“ActionName”, “ControllerName”)

RedirectResult类

在服务器端从当前Action跳转到其他URL地址.

在Controller类中的辅助方法为:Controller.Redirect(string  url)

JsonResult类

该类用于向客户端返回一段Json格式的字符串.

在Controller类中的辅助方法为:Controller.Json(object  data);

注意:默认情况下mvc拒绝响应以get方式发送的ajax请求,需要使用JsonRequestBehavior.AllowGet。

PartialViewResult类

该类的作用是向客户端响应Views目录的一个分部视图文件。分部视图就是只包含html片段的视图文件.

在Controller类中的辅助方法为:Controller.PartialView();

下图演示了在创建视图文件时,如何创建一个分部视图文件(勾选“创建为分部视图”复选框):

FilePathResult类

该类用于实现文件下载.

在Controller类中的辅助方法为:Controller.File(string  filePath,  string  contentType, string  fileName);

FileContentResult类

FileStreamResult类

EmptyResult类

该类用于向客户端响应一个空结果。

HttpStatusCodeResult类

该类用于向客户端相应指定的状态码.

HttpNotFoundResult类就是HttpStatusCodeResult的子类,表示404这一状态码。

下面的是一些常用的http状态码:

404:资源未找到(表示客户端请求服务器的资源地址不存在)

500:服务器内部错误(以5XX开头的表示服务器端在处理过程中出现的错误)

200:成功(表示客户端发送的请求被服务器成功的处理和响应)

其他

如何在aspx页面中导入命名空间?

方式一:在指定的页面添加<%@ Import Namespace=”命名空间” %>

方式二:在项目的web.config配置文件中添加pages---namespaces----add

通过方式二添加的命名空间可以在所有的aspx页面中使用;而方式一添加的命名空间只能在当前页面中使用.

ASP.NET MVC进阶三

ASP.NET MVC中的AJAX应用

首先,在ASP.NET MVC中使用自带的ajax功能,必须要导入2个js文件(顺序不能颠倒):

ASP.NET MVC提供了2个常用的ajax辅助方法.

Ajax.ActionLink

该辅助方法用于在页面上生成具有ajax功能的超链接.

在该辅助方法中有一个AjaxOptions类型的参数,它包括如下属性:

  • Confirm:在发送ajax请求前,弹出确认对话框,该属性就是设置对话框中的提示消息
  • HttpMethod:用于设置请求的类型:Get|Post
  • UpdateTargetId:用于设置服务器响应的结果更新到页面中目标元素ID
  • InsertionMode:用于设置服务器相应的结果如何插入到被更新的元素中,它的值可以包括3种: 

InsertionMode.Replace:用新值替换旧值(默认值)

InsertionMode.InsertAfter:将新值插入到目标元素的底部

InsertionMode.InsertBefore:将新值插入到目标元素的顶部

  • OnBegin:当执行ajax请求前,执行的js函数
  • OnSuccess:当执行ajax请求成功时,执行的js函数
  • OnFailure:当ajax请求失败时,执行的js函数
  • OnComplate: 当ajax请求完成后,执行的js函数(不管请求失败或成功,都会执行)
  • LoadingElementId:在ajax请求期间,可以显示一段友好的提示,该属性用于设置提示元素的ID
  • LoadingElementDuration: 提示元素在显示和隐藏时,可以执行一段动画,该属性用于设置提示元素的动画执行时间

Ajax.BeginForm

该ajax辅助方法用于以ajax方式提交表单数据.

其他

如何在页面中加载分部视图?

方式一:调用Html.RenderPartial(“viewName”)

方式二:调用Html.RenderAction(“actionName”)

他们之间的区别如下图所示:

何时使用RenderAction,何时使用RenderPartial?

如果需要向视图中传递数据,而原视图中又没有需要传递的数据时,就需要调用RenderAction.

注意: Html.RenderPartial有多种重载形式,下面列举它的2种常用形式:

Html.RenderPartial(“分布视图的名称”)

Html.RenderPartial(“分部视图的名称”,  object  模型数据)

如何从服务器获取一段json格式的字符串?

服务器的Action方法返回值类型为JsonResult,并且在方法内部可以调用Controller.Json()辅助方法.

ASP.NET MVC进阶四

ASP.NET MVC中使用母版页

ASPX视图引擎的母版页功能

Aspx视图引擎中母版页的用法,在webform模型和Mvc模型中,都是一样的.

Aspx视图有2个很重要的标记:

  • asp:ContentPlaceHolder标记
  • asp:Content标记

asp:Content用于替换母版页中的asp:ContentPlaceHolder.

在母版页中应该根据实际需要,定义多个asp:ContentPlaceHolder,而非默认的2个.

注意:在mvc中添加母版页时一定要选择 MVC3视图母版页,而不能选择下面的母版页和嵌套的母版页.

在MVC中,没有提供嵌套的母版页模版文件,需要用户自行定义:

Razor视图引擎

Razor视图引擎的宗旨:将键盘的敲击次数降到最低

Razor基本语法

  • 定义变量:
  • 输出变量的值:

  • 如何在页面中原样输出@符号

  • 如何在页面中输出hisageis5.

  • if-else的写法:

  • for|foreach的写法:

注意:如果在for循环中需要进行条件判断,不需要在if前加@符号.

  • Html辅助方法的使用:

注意:@Html.TextBox()后面不能有分号.

  • 在razor视图页面中定义数据模型的类型信息:

  • 在razor视图页面中加载分部视图或加载其他action:

注意:@{}里面的分号不能省略.

  • 在Razor视图中如何生成form标记:

Razor视图引擎中母版页的用法

  • Razor视图中母版页功能称之为布局页.
  • Razor视图的布局页文件名必须以下划线_开头.
  • Mvc项目中如何添加Razor布局页:

  • Razor视图中布局页的默认代码如下:

@RenderBody的作用同aspx视图中的asp:ContentPlaceHolder相似,用于加载内容页.

  • Razor视图引擎中,如何让内容页继承布局页?

在内容页中使用Layout属性指定要继承的布局页.代码如下:

其中ViewBag.Title是用于设置布局页中的页面title.

如果不需要内容页继承布局页,只需要将Layout属性的值设置为null.

如果没有将Layout设置为null,而是将其删除掉,那么内容页仍然有可能会继承一个默认的布局页.因为在Views目录中存在一个名称为:_ViewStart.cshtml的文件,该文件是视图的默认配置文件,它里面设置了默认的布局页面,示例代码如下:

嵌套的布局页,在mvc中也没有提供默认的模版文件,需要用户自行添加.

Html.RenderSection()

该辅助方法用于加载html片段.该段Html代码可以是本页面中定义的,也可以是内容页面中定义的.

示例代码如下:

Razor视图中如何自定义辅助方法

使用@helper来定义辅助方法.示例代码如下:

在ASP.NET MVC中如何实现模块化开发?

对于一个系统而言,往往包含前台和后台两大块.比如,前后台都包含用户登录功能,它们的控制器都叫Account,对应的登录方法也都叫Login,那么如何区分哪个是后台的,哪个是前台的???

ASP.NET MVC在2.0中就添加了Area(区域)的功能,用来解决上面的问题.

通过Area功能可以将一个大的软件项目划分为N个功能模块,每个功能模块中都可以相同名称的控制器和视图文件.

首先,右击项目,在弹出的右键菜单中选择----添加----区域

其他在区域对话框中填写区域的名称:

创建好的目录结构如下图:

每一个区域都有自己独立的一套MVC目录.

ASP.NET MVC数据分页

Aspx视图引擎和razor视图引擎中如何实现分页功能

主要使用了第三方的一个分页控件MvcPager.dll

分页功能分三步实现:

第一步是在项目中导入MvcPager.dll,并导入相应的命名空间: Webdiyer.WebControls.Mvc

第二步是在Action中组织要分页的数据

第三步是在页面中生成页码信息

注意:MvcPager.dll包括非ajax和ajax两种使用模式.ajax模式下需要使用Ajax.Pager辅助方法.

其他

  • 如何在页面中加载静态文件(图片\css\js)?

使用Url.Content(“filePath”)方法.

  • 添加新的Area后,访问报错的解决办法:

修改Global.ashx文件中注册的默认路由

ASP.NET MVC进阶五

重写Controller类的虚方法

OnActionExecuting\OnActionExecuted

OnActionExecuting:该方法在执行目标Action之前被调用

OnActionExecuted:该方法在执行目标Action之后被调用

OnResultExecuting\OnResultExecuted

OnResultExecuting:该方法在执行目标视图之前被调用

OnResultExecuted:该方法在执行目标视图之后被调用

OnAuthorization

该方法用于验证用户的授权信息.因此如果要进行身份的验证,应该在该方法中进行.

OnException

当访问Action出现异常时,该方法会自动被调用.

下面的示例代码演示了如何自动捕获系统异常,并将异常信息记录到日志文件中.

ASP.NET MVC中的过滤器

过滤器是指在用户发送请求时,MVC框架可以对用户的请求进行拦截,根据特定的条件对这些请求进行筛选过滤.

ASP.NET MVC中提供了下面几种过滤器,他们的作用和上面将的重写方法功能类似,但是这些过滤器是全局的,默认对所有的Action请求都有效.

IAuthorizationFilter

授权过滤器

IActionFilter

行为过滤器

IResultFilter

结果过滤器

IExceptionFilter

异常过滤器

注意:过滤器需要在Global.asax文件中进行注册后方能起效.

ASP.NET MVC扩展案例

1.ASP.NET MVC中使用富文本编辑器

ASP.NET MVC集成ueditor

kindeditor

2.ASP.NET MVC中如何使用模态对话框

Asp.net Mvc集成artDialog或zDialog

3.ASP.NET MVC中如何实现通用弹框功能

通用弹框功能包括:从Action中返回视图时弹框;跨Action弹框;

4.数据验证Remote的扩展应用:

新增和修改部门时,如何控制部门名称不能为重复?

5.ASP.NET MVC中实现多文件上传

类似于QQ空间上传照片时,可以同时上传多张图片.

6.ASP.NET MVC应用程序自动发布

将MVC网站部署好之后,无需手工部署数据库,由程序引导用户完成数据库的部署(参考Aspx   面)

7.ASP.NET MVC中实现通用权限管理模块

按角色分配系统功能菜单

C#.NET高级笔试题 架构 优化 性能提升 2024 金九银十 最新 资深 八股文-CSDN博客

MySQL面试题 2024 金九银十 最新 C# 高级 资深 DB 八股文-CSDN博客

国产精品ORM框架-SqlSugar详解 SqlSugar初识 附案例源码 云草桑 专题一_sqlsuger进阶-CSDN博客

C#高级开发 线上面试题20240711_c# 开发高级面试题-CSDN博客

Redis高频面试题-CSDN博客

数据库SqlServer笔试题_sqlserver 笔试题-CSDN博客

WPF 2024 金九银十 最新 高级 架构 面试题 C#_wpf 面试题-CSDN博客

WPF UI交互专题 界面结构化处理 查看分析工具Snoopy 逻辑树与视觉树 平面图像 平面图形 几何图形 弧线 01_wpf逻辑树和视觉树代码-CSDN博客

C#.NET Core 笔试题 架构 优化 性能提升 2024 金九银十 最新 资深 八股文-CSDN博客_net core笔试题-CSDN博客

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com