ASP.NET MVC 3 笔记
1. MVC设计模式
Ø Model:是指要处理的业务代码和数据操作代码。
Ø View:主要用于跟用户打交道,并能够展示数据。
Ø Controller:可以看作是 Model 和 View 的桥梁。
Ø 优点:
1. 可以降低 Model(业务/数据)与 View(视图)之间的耦合关系。
2. 可以复用视图(同样的数据,可以使用不同的视图展示出来)。
2. MVC框架
Ø 遵循:约定大于配置。
1) 控制器:类命名以 Contoller 结尾,例如:HomeController。
2) 视图:将会在 Views文件夹下生成一个与控制同名的文件夹,例如:~/View/Home。
3) Action 方法:将会在 ~/View/Home 文件夹下生成一个与 Action 方法同名的*.cshtml 文件,例如:Index.cshtml。
3. MVC 传值
1) MVC 传值的方式:
1. VeiwBag: 数据类型为 dynamic,是一个动态数据类型。其生命周期为当前Controller 下的 Action 与 View、以及其他 View。
2. ViewData: 数据类型为 Syste.Web.Mvc.ViewDataDictionary<string, object>,是一个实现了 System.Collections.Generic.IDictionary<TKey, TValue> 接口的字典类型。其生命周期为当前Controller 下的 Action 与 View、以及其他 View。
注意:ViewBag 与 ViewData 数据可以共享?
3. TempData: 数据类型为 System.Web.Mvc.TempDataDictionary<string, object>,是一个实现了 System.Collections.Generic.IDictionary<TKey, TValue> 接口的字典类型。其生命周期为当前Controller 下的 Action 与 View,以及当前会话中的其他 Action,可以跨 Controller 与 Action。
4. Model: 数据类型为 System.Object, 是一个 object 类型。其生命周期为当前 Controller 下的 Action 与 View。
5. Session: 数据类型为 System.Web.HttpSessionStateBase, 是一个实现了 System.Collections.ICollection 与 System.Collections.IEnumerable 接口的 object 集合类型。其生命周期为会话结束前(默认为 20 分钟),可以跨 Controller 与 Action。
2) Action 与 视图
1. 视图取值时,VeiwBag、ViewData、TempData 都不区分大小写。
2. 使用 View() 方法指向其他 View 时,VeiwBag、ViewData、Session 可以取到值, 而 TempData 则取不到。
3) Action 与 Action
1. Action取值时, TempData 不区分大小写。
2. 使用 RedirectToAction() 方法跳转其他 Controller 或 Action 时,TempData、Session 可以取到值,而 VeiwBag、ViewData 则取不到。
4. MVC 视图基类
Ø 视图基类 WebPage,声明如下:
public abstract class WebPage : WebPageBase
{
protected WebPage();
public override HttpContextBase Context { get; set; }
public HtmlHelper Html { get; }
[Dynamic]
public dynamic Model { get; }
public ModelStateDictionary ModelState { get; }
public static void RegisterPageExecutor(IWebPageRequestExecutor executor);
public override void ExecutePageHierarchy();
protected override void InitializePage();
}
5. Html 属性(HtmlHelper 类)
Ø 该类位于 System.Web.WebPages.dll 程序集的 System.Web.WebPages.Html 命名空间中。
1) Raw(string value) 方法
Ø 描述:返回不是 HTML 编码的标记。
Ø 示例:
1. 输出一段 html 的 js
1) View
var var1 = '@("<span>span1</span>")';
var var2 = '@Html.Raw("<span>span1</span>")';
2) 结果:
var var1 = '<span>span1</span>';
var var2 = '<span>span1</span>';
2) BiginForm() 方法
Ø 描述:用于创建一个有开始和结束标签的form表单。
Ø 示例:
1. 输出一段输出 form 表单元素
1) View
@using (@Html.BeginForm("Modify", "Home", FormMethod.Post)){}
2) 结果:
<form action="/Home/Modify/53" method="post"></form>
3) TextBoxFor() 方法
Ø 描述:用于创建一个文本框。
示例:@Html.TextBoxFor(o => o.ATitle)
结果:<input id="ATitle" name="ATitle" type="text" value="阿桑地方123" />
4) TextAreaFor() 方法
Ø 描述:用于创建一个文本域。
示例:@Html.TextAreaFor(ba=>ba.AContent,10, 60, null)
结果:<textarea cols="60" id="AContent" name="AContent" rows="10">阿桑地方123</textarea>
5) DropDownListFor() 方法
Ø 描述:用于创建一个下拉列表框。
示例:@Html.DropDownListFor(ba=>ba.ACate, ViewBag.ListCates as IEnumerable<SelectListItem>)
结果:<select data-val="true" data-val-number="字段 ACate 必须是一个数字。" data-val-required="ACate 字段是必需的。" id="ACate" name="ACate"><option value="2">cccccccc</option></select>
6) ActionLink() 方法
Ø 说明:用于创建一个超链接。
示例:@Html.ActionLink("返回", "Index", "Home")
结果:<a href="/">返回</a>