Asp.Net MVC
2016-09-06 11:15
246 查看
EMAIL邮箱地址不区分大小写,浏览器地址栏url也不区分大小写。
1. 在实际开发中,数据库的主键很少用自动增长,因为每次插入都需要查询数据库,计算出新的主键值,一般用GUID
2.MVC是微软2009年公开的第一个开源表示层框架,这是微软的第一个开源项目
MVC目的不是取代webform的开发,只是web开发的另一个选择。两者是平行的,webform可以做的mvc也可以,mvc可以做的webform也可以做。
App_Data文件夹:主要是从安全角度考虑,把一些文件放进去,直接访问不到,比如xml,数据库等相关文件可以放在该文件夹下。
3. MVC中写的url都是指向Action,不在是指文件路径了。
如"/Test/Data" 不再是指Test文件夹下的Data文件,而是指TestController里的Data方法。
4. MVC 约定大于配置,java是通过配置文件来找到访问的类,而.net mvc是通过约定好文件的命名及存放规则来做的,不需要像java那样通过配置文件。
5.EF是一个ORM框架,什么是ORM:就是表实体与表之间的相互转化,也就是一个表实体的数据对应表中的一天记录,反之亦然。
EF必须通过ado.net---sql--database来操作数据库,它帮助我们把实体的变化翻译成sql脚本,在去调用底层的ado.net去操作数据库。
db.Entry(user).State=EntityState.Added;//最新版的增删改查,Added可以改成其他三个实现。
db.User.Add(user);//与上面一行功能一样
6.数据库设计软件PowerDesigner
7.多对多的表,必须设计一个中间表,表名一般用两个表的名称联合命名,表的字段为两个表的主键及本表的主键,即中间表有两个外键指向两张表。
8.
select * //1
from user //2
where id>10 //3
数据库执行查询脚本的顺序是2-3-1
即演变为linq:
var data=from u in db.User
where u.id<10
select u;
使用变量u去遍历db.user这个集合,把满足条件的数据放入data中,data是一个集合
此处的var为IQueryable<User>
linq表达式的所有的返回值都是IQueryable<T>类型的
问题:是内存过滤还是数据库里过滤,即是把全部的user表中数据取出给应用程序,加载到内存中过滤呢?还是数据库过滤完id<10的数据再交给应用程序呢????
答案是后者。EF比较高效
9.延迟加载
var data=from u in db.User
where u.id<10
select u;
//此时并没有使用到data数据,并不会去查询数据库
。
。
。
foreach(User in data)//只有data数据被用到的时候,才会去查询数据库,也就是延迟加载
{
}
那如果之后又用到一次,还会不会去取数据库呢?
通过sqlserver profile软件发现,还会向数据库发送查询,取数据
那如何解决这个问题?????
把查询出来的数据data缓存在内存中既可。如何做呢?
转成List集合既可
var list=data.ToList();//把取出来的数据转成List集合,之后使用这个List集合就可以了,不会再向数据库取数据了。
涉及到导航属性的时候,不需要单独去查数据库,直接用就可以啦。
即:
第一种延迟加载:IQueryable集合,用到的时候才去真正的查询数据库。
第二种延迟加载:有导航属性的,在使用导航属性的时候,不需要先查,直接用就行了,EF会自动判断导航属性里是否有值,如果有值就直接返回,如果没值,会自动的去查询获取数据。
10. Views文件夹里不能有html文件。
Controller 控制器 约定:
1.名字必须以Controller结尾
2.必须实现接口IController
3.不能是静态的类
4.不是必须非得把控制器类放到当前项目中(在别的项目中的话添加引用就行),也不是必须一定放在Controllers文件夹下
5.控制器下面的方法称为Action
11.
webform:http://localhost/index.aspx 请求的页面
MVC:http://localhost/控制器/方法名 请求的是哪个控制器下的哪个方法(Action)
webform的所有请求都是请求页面,而MVC都是请求控制器下的Action
string s=str?? string.Empty;//如果str为空,返回string.Empty,不为空,返回自身
12.控制器如何把数据传给前台View展示:ViewData容器来传递数据
因为前台页面继承的类与Controller继承的类有相同的属性,ViewDataDictionary。所以可以通过该容器实现控制器与前台view页面传递数据。
如在action里获得列表集合存进ViewData中,ViewData["list"]=datalist;//datalist是一个数据集合
在前台视图获得该集合并展示。
<% List<User> data=(List<User>) ViewData["list"] ;%>//把ViewData强转成List<User> 类型
<table>
<%
foreach( var item in data)
{
%>
<tr>
<td> <%= ......%> </td>
</tr>
<%
{
%>
</table>
在控制器里的Action方法上右键--添加视图,会自动的在Views文件夹下产生相应的前台页面。
每个控制器会在Views文件夹下产生一个同名的文件夹,该控制器里的所有Action的视图都在此文件夹下。
return View();//会自动搜索在Views文件夹里与控制器同名的文件夹,再该文件夹下搜索同名的视图,如果找不到,再搜索Shared公共文件夹,如果还找不到就报错。
return View("");//指定视图展示。
13.MVC调试时,不能设置起始页,因为MVC不是直接访问页面,而是访问控制器Controller
同理,也不能像webform那样,右键点击 在浏览器查看
一般在浏览器中输入地址
MVC工程需要生成,快捷键F6
[HttpGet]
Public ActionResult Registe()
{
}
[HttpPost] //指定该action只能处理post请求,get请求不会去处理,如果不指定,get,post都可以处理
Public ActionResult Registe(FormCollection collection)//不写参数也可以,直接request获取数据,写参数主要是重载。
{
string name=collection["username"];//这样也可以去出数据
string pwd=Requset["password"];
return RedirectToAction("");在再一个Action里跳转到另一个action
}
Action可以重载
前台aspx页面,不再用服务器控件,而是直接用原生的html标签。
//action跳转
return RedirectToAction("");在再一个Action里跳转到另一个action
14.
控制器Controller三个职责:
1.处理用户的交互
2.调用业务逻辑
3.指定一个视图展示数据
视图View职责:就一个,展示数据
模型Model:数据库访问,业务逻辑,检验规则等,供Action调用,提供数据给action
15
1. 在实际开发中,数据库的主键很少用自动增长,因为每次插入都需要查询数据库,计算出新的主键值,一般用GUID
2.MVC是微软2009年公开的第一个开源表示层框架,这是微软的第一个开源项目
MVC目的不是取代webform的开发,只是web开发的另一个选择。两者是平行的,webform可以做的mvc也可以,mvc可以做的webform也可以做。
App_Data文件夹:主要是从安全角度考虑,把一些文件放进去,直接访问不到,比如xml,数据库等相关文件可以放在该文件夹下。
3. MVC中写的url都是指向Action,不在是指文件路径了。
如"/Test/Data" 不再是指Test文件夹下的Data文件,而是指TestController里的Data方法。
4. MVC 约定大于配置,java是通过配置文件来找到访问的类,而.net mvc是通过约定好文件的命名及存放规则来做的,不需要像java那样通过配置文件。
5.EF是一个ORM框架,什么是ORM:就是表实体与表之间的相互转化,也就是一个表实体的数据对应表中的一天记录,反之亦然。
EF必须通过ado.net---sql--database来操作数据库,它帮助我们把实体的变化翻译成sql脚本,在去调用底层的ado.net去操作数据库。
db.Entry(user).State=EntityState.Added;//最新版的增删改查,Added可以改成其他三个实现。
db.User.Add(user);//与上面一行功能一样
6.数据库设计软件PowerDesigner
7.多对多的表,必须设计一个中间表,表名一般用两个表的名称联合命名,表的字段为两个表的主键及本表的主键,即中间表有两个外键指向两张表。
8.
select * //1
from user //2
where id>10 //3
数据库执行查询脚本的顺序是2-3-1
即演变为linq:
var data=from u in db.User
where u.id<10
select u;
使用变量u去遍历db.user这个集合,把满足条件的数据放入data中,data是一个集合
此处的var为IQueryable<User>
linq表达式的所有的返回值都是IQueryable<T>类型的
问题:是内存过滤还是数据库里过滤,即是把全部的user表中数据取出给应用程序,加载到内存中过滤呢?还是数据库过滤完id<10的数据再交给应用程序呢????
答案是后者。EF比较高效
9.延迟加载
var data=from u in db.User
where u.id<10
select u;
//此时并没有使用到data数据,并不会去查询数据库
。
。
。
foreach(User in data)//只有data数据被用到的时候,才会去查询数据库,也就是延迟加载
{
}
那如果之后又用到一次,还会不会去取数据库呢?
通过sqlserver profile软件发现,还会向数据库发送查询,取数据
那如何解决这个问题?????
把查询出来的数据data缓存在内存中既可。如何做呢?
转成List集合既可
var list=data.ToList();//把取出来的数据转成List集合,之后使用这个List集合就可以了,不会再向数据库取数据了。
涉及到导航属性的时候,不需要单独去查数据库,直接用就可以啦。
即:
第一种延迟加载:IQueryable集合,用到的时候才去真正的查询数据库。
第二种延迟加载:有导航属性的,在使用导航属性的时候,不需要先查,直接用就行了,EF会自动判断导航属性里是否有值,如果有值就直接返回,如果没值,会自动的去查询获取数据。
10. Views文件夹里不能有html文件。
Controller 控制器 约定:
1.名字必须以Controller结尾
2.必须实现接口IController
3.不能是静态的类
4.不是必须非得把控制器类放到当前项目中(在别的项目中的话添加引用就行),也不是必须一定放在Controllers文件夹下
5.控制器下面的方法称为Action
11.
webform:http://localhost/index.aspx 请求的页面
MVC:http://localhost/控制器/方法名 请求的是哪个控制器下的哪个方法(Action)
webform的所有请求都是请求页面,而MVC都是请求控制器下的Action
string s=str?? string.Empty;//如果str为空,返回string.Empty,不为空,返回自身
12.控制器如何把数据传给前台View展示:ViewData容器来传递数据
因为前台页面继承的类与Controller继承的类有相同的属性,ViewDataDictionary。所以可以通过该容器实现控制器与前台view页面传递数据。
如在action里获得列表集合存进ViewData中,ViewData["list"]=datalist;//datalist是一个数据集合
在前台视图获得该集合并展示。
<% List<User> data=(List<User>) ViewData["list"] ;%>//把ViewData强转成List<User> 类型
<table>
<%
foreach( var item in data)
{
%>
<tr>
<td> <%= ......%> </td>
</tr>
<%
{
%>
</table>
在控制器里的Action方法上右键--添加视图,会自动的在Views文件夹下产生相应的前台页面。
每个控制器会在Views文件夹下产生一个同名的文件夹,该控制器里的所有Action的视图都在此文件夹下。
return View();//会自动搜索在Views文件夹里与控制器同名的文件夹,再该文件夹下搜索同名的视图,如果找不到,再搜索Shared公共文件夹,如果还找不到就报错。
return View("");//指定视图展示。
13.MVC调试时,不能设置起始页,因为MVC不是直接访问页面,而是访问控制器Controller
同理,也不能像webform那样,右键点击 在浏览器查看
一般在浏览器中输入地址
MVC工程需要生成,快捷键F6
[HttpGet]
Public ActionResult Registe()
{
}
[HttpPost] //指定该action只能处理post请求,get请求不会去处理,如果不指定,get,post都可以处理
Public ActionResult Registe(FormCollection collection)//不写参数也可以,直接request获取数据,写参数主要是重载。
{
string name=collection["username"];//这样也可以去出数据
string pwd=Requset["password"];
return RedirectToAction("");在再一个Action里跳转到另一个action
}
Action可以重载
前台aspx页面,不再用服务器控件,而是直接用原生的html标签。
//action跳转
return RedirectToAction("");在再一个Action里跳转到另一个action
14.
控制器Controller三个职责:
1.处理用户的交互
2.调用业务逻辑
3.指定一个视图展示数据
视图View职责:就一个,展示数据
模型Model:数据库访问,业务逻辑,检验规则等,供Action调用,提供数据给action
15
相关文章推荐
- asp.net MVC3 View视图
- ASP.NET MVC 登录验证
- asp.net mvc 请求过程图解
- asp.net MVC_EF_DB
- ASP.NET MVC 框架处理请求生命周期
- session不能使用 ASP.NET MVC
- ASP.NET MVC 操作AD 获取域服务器当前用户姓名和OU信息
- iis部署asp.net mvc网站出错的解决方法
- asp.net mvc 重定向
- asp.net mvc全局错误处理
- ASP.NET MVC
- asp.net MVC上传图片完整方法
- Asp.net mvc 控制器
- asp.net mvc 第二章
- Asp.Net MVC系列--基础篇(3)
- Asp.net MVC获取访问系统的客户端计算机的主机名和IP地址
- ASP.NET MVC 3.0 Rezor 学习笔记之一
- asp.net mvc 原理和特性
- asp.net MVC-- viewbag和viewdata的区别
- ASP.NET MVC 3.0 Razor 学习笔记之二