您的位置:首页 > 编程语言 > ASP

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: