Asp.Net MVC part2 View、Controller详解

时间:2022-10-01 15:18:02

View详解
Razor视图引擎简介
HtmlHelper
强类型页面

Razor视图引擎简介
强大的@:表示使用C#代码,相当于aspx中的<%%>
可以完成输出功能
当遇到html标签时会认为C#代码结束,贪婪匹配后面的内容,如@a1会认为是变量a1,如@a<br>1会认为是变量a
会对标签内容进行Html编码
注释:@*注释内容*@
注意:@变量表示输出,结尾不加分号
引入命名空间:@using 命名空间;

HtmlHelper
Helper:是为了方便View的开发而产生的
HtmlHelper的演变
普通链接:<a href="/home/index">首页</a>
当路由规则改变时,几乎所有的超连接都要更改
借助Url根据路由规则生成链接地址:<a href=“@Url.Action(”Index“,”Home“)”>首页</a>
缺陷是不能编译时排错,只有运行时才知道是否正确
专门用于MVC的链接方式:Html.Action(“Home”,“Index”),会根据路由规则生成a标记,并且在运行时可以进行有效性检查,不需要用户点击链接后才知道链接出错了
Raw:输出
Encode:进行Html编码
Action:服务器端其它页面

表单控件
类型一:Html.**(),以字符串为参数
类型二:Html.**For(),以Expression<Func<TObject,TProperty>>为参数,一般用于强类型页面
自动装配:根据参数生成控件的name、id属性,赋值会根据ViewData中同名键获取数据赋值给value属性
注意:结尾不加分号

表单方式一:using(Html.BeginForm(actionName,controllerName)){…}
表单方式二:
@Html.BeginForm(actionName,controllerName)

@{Html.EndForm();}

标签框:Html.Label(string expression,string text):会生成一个label标记,并显示text内容
文本框:Html.TextBox(“AA”);//会自动取ViewDate中键为AA的值,同时会以“AA”作为生成的HTML控件的id与name属性的值
隐藏域:Html.Hidden(“AA”)//同TextBox
注意:没有提交按钮、按钮的封装

复选框:Html.Checkbox(name)//被翻译成一个checkbox与一个hidden
单选按钮:Html.RadioButton(name,value,isChecked)//被翻译成radio控件
DropDownList:在Action中向ViewData中传递一个List<SelectListItem>集合,在View中指向ViewData的参数,则会以下拉列表的形式展示数据

强类型视图
手动创建强类型视图
在ViewModel中创建一个类型
在Action中为ViewData.Model赋值
在View中使用“@model 类型”设置
根据菜单创建强类型视图
优点
在编译时可以完成代码检验
智能提示

使用表单的**For系列控件
要求使用强类型页面
强类型的优点:可以在编译阶段进行代码检查
在Action中为ViewData.Model赋值
将View页面做成强类型页面
使用Html.**For(model=>model.Property)的格式调用,参数为一个lambda表达式,可以根据对象的属性快速生成表单控件

Controller详解
一般继承自Controller类,类Controller继承自ControllerBase,实现了IController接口
Action的本质就是类中的公有方法,可以进行重载,要求参数不同
可以接收客户端的Get或Post请求,如果希望某个方法只处理某一种请求,可以在方法前加特性[HttpGet]或[HttpPost],处理请求时会根据参数进行相应方法的调用
也可以通过路由规则传递数据

接收参数
方式一:使用Request根据key接收value
方式二:自动装备,在方法的参数位置,定义类型及参数名称,mvc会自动匹配相同名称的属性值,即匹配input的name与对象的属性相同名称的值
还可以完成自定义类型参数的封装
自动装配的要求:参数的名称或对象类型的属性必须与参数的键相同

返回结果
返回类型为ActionResult,是一个抽象类,需要返回具体类型的结果对象

直接或间接继承自ActionResult的类型
ViewResult:使用View()可以指定一个页面,也可以指定传递的模型对象,如果没有指定参数则表示返回与Action同名的页面
ContentResult:使用Content(string content)返回一个原始字符串
RedirectResult:使用Redirect(string url)将结果转到其它的Action
JsonResult:使用Json(object data)将data序列化为json数据并返回,推荐加上JsonRequestBehavior.AllowGet可以处理Get请求,一般结合客户端的ajax请求进行返回

如果控制器类建立在当前项目中,则需要放到Controller文件夹中
控制器可以从当前项目中分离出来,放到其它的项目中,本质就是将类定义到其它的项目中