ASP.NET MVC 3 第一天笔记

 ASP.NET MVC 3 第一天笔记

     Asp.net mvc 应用程序的结构

/Controllers

保存处理url请求的controller类

/Models

保存表示和操纵数据以及业务对象的类

/Views

负责呈现输出结果(如html)的UI模板文件

/Scripts

保存javascript库文件和脚本

/Content

保存css和图像文件以及其他非动态/非javascript的内容

/App_Data

存储想要读取/写入的数据文件

Asp.net mvc和约定

  1. 约定大于配置
  2. 约定简化通信

控制器

控制器操作中的参数

//get:/Store/Browse?genre=?Disco

利用实用方法HttpUtility.HtmlEncode

(“Store.Browse,Genre=”+genre)

注:可以阻止用户向视图注入JavaScript代码

/Store/Browse?Genre=<script>window.location=’http://hacker.example.com’</script>

视图

检查由控制器提交的ViewDataDictionary(通过ViewData属性访问),另外一部分是将其内容转换成HTML格式

Asp.net mvc 3中 ViewBag出现,动态的

ViewData[“Message”] 相当于 ViewBag.Message

大多情况下,不存在真正的技术优势

差异

1.访问的关键字是一个有效的C#标识符使,viewBag才起作用

如果在ViewData[“Key with Spaces”]中存放一个值,那么将不能使用ViewBag访问

  1. 动态的值是不可以作为参数传给扩展方法的。因为编译器为了选择正确的扩展方法,必须知道每一个参数的真正类型

如:@Html.TextBox(“name”ViewBag.Name)是错误的,

使用ViewData[“Name”]或(string)ViewBag.Name

指定视图

Public ActionResult Index(){

ViewBag.Message =”Hello, Vinkong”;

Return View(“NotIndex”)

}

上面仍然在/Views/Home目录中查找

需要指定完全不同的目录结构中的视图,可以使用~符号来提供完整的路径

Return view(“~/View/Example/Index.cshtml”);

强类型视图

Public ActionResult List(){

Var albums = new List<Album>();

for(int i=0;i<10;i++){

Albums.add(new Album(Title =”Product”+i));

}

ViewBag.Albums = albums;

Return View();

}

视图:

第一种方式

@foreach(Album a in (ViewBag.Alblums as IEnumerable<Album>)){

<li>@a.Title</li>

}

第二种方式简洁,但是不能使用智能提示

@foreach(dynamic p in ViewBag.Albums){

<li>@p.Title</li>

}

第三中方式,需要输入模型的完全限定名

@model IEnumerable<MvcApplication1.models.Album>

<ul>

@foreach(Album p in Model){

<li>@p.Title</li>

}

如果不想输入完全限定名称,可以使用@using关键字声明

@using MvcApplication1.Models

@model IEnumerable<Album>

Foreach(Album p in Model){

<li>@p.Title</li>

}

注:经常使用的名称空间,可以在View目录下的web.config文件声明

<add namespace=”MvcApplication1.Models”>

原文地址:https://www.cnblogs.com/Vinkong/p/12459327.html