MVC
ASP.Net的两种开发模式
- Webform,webpage
- MVC
MVC的安排
- MVC的设计模式
- Razor引擎
- 控制器详解
- 校验
- MVC下的AJAX
- 路由
- 过滤器
- MVC高级
MVC目录说明
- App_Data 数据文件夹,外网不可访问
- App_Start 初始化配置
- Content
- Controllers 控制器文件夹
- Scrips
- View 视图文件夹
- Global.asax
- Web.config
- Startup.cs
Q:Controller 中的控制器与View中的同名文件夹一一对应,一个.cshtml的页面对应一个方法,不特定说明的情况下,return View()返回对应的页面 ,但是返回的页面是如何得到数据的?
Q:为什么默认情况下打开的是home/index页面而不是其他的页面
A:在RouteConfig中配置了相关的属性
Razor 语法
Razor只支持两种文件类型 .csheml .vbhtml
@{......} 定时多个变量时可使用代码块
@变量名 可进行值的输出
*@ @* 注释
MVC向页面传值
- ViewData 通过键值对的形式传值,通过键的形式取值,取出的值需要进行数值转化 单个页面传值
- ViewBag 为ViewBag定义一个名称,通过名称取值 单个页面传值
- TempData 使用方式和ViewData类似 单个页面/跨页传值,一旦被取了值就会被释放
MVC页面的跳转
一律采用 控制器/方法名/id
MVC HtmlHelper
当版本的路由规则改变的时候,以前所写的路由路径就会作废:
一般情况下的标签使用规则
通过Url内置对象action()方法实现 <a href = "@Url.Action("about","home",new {name = "tom"})">
使用HtmlHelper辅助类对象Html之的方法 @Html.ActionLink("跳转文本","about","home",new {name = "tom"})
HTML辅助方法 | 说明 |
---|---|
Html.BeginForm() | <form>标签 |
Html.CheckBox() | <input type = "checkbox">标签 |
Html.DropDownList() | <select>标签 |
Html.Password() | <input type = "password">标签 |
Html.RadioButton() | <input type = "radio">标签 |
Html.TextArea() | <textarea/>标签 |
Html.TextBox() | <input type = "text">标签 |
Html.Hidden() | <input type = "hidden">标签 |
对于表单的传值是通过name + value的形式传值,对于@Html.TextBoxFor(t => t[0].Name)
这种类型的赋值,只适用于单个的类中,且类中没有其他的嵌套类,否则name值就会变成很奇怪的下标+变量名的形式,在后台处理的时候会很麻烦,也会出错。
强类型
为了解决数值在传递的时候类型转换的麻烦(u 为对象)
viewData.Model = u
Return view(视图名称,u)
数据的绑定
数据的自动装载,在表单的输入的时候通过特定的名称和方法中的形参相匹配传入特定的参数
[HttpPost]
public ActionResult Add(int userage,string usergender,string username){}
<td>@Html.TextBox("username", "请填入用户姓名")</td>
文件上传
文件上传的时候需要一个表单用于提交数据,表单应该添加一个属性enctype="multipart/form-data"
对于标签中没有name属性的标签,可添加
<td>@Html.Hidden("username", u.id)</td>
jQuery代码验证
表单的验证分为5种
- 必填检查
- 范围检查
- 比较验证
- 格式验证
- 特殊验证
表单的验证基本都依靠这个属性,
onblur ="" // 失去焦点之后触发的方法
模型注解验证
主要原理为和实体类进行绑定,在表单中id以model.Name进行id 的绑定,在实体类中用[]的形式验证,对于目前阶段用处不大,暂时不学。
ajax
返回异步请求
$("#showTime").click(function () {
$.ajax({
url: "/User/showTime", // 请求地址
type: "post",
contentType: "application/x-www-form-urlencoded", // 返回内容编码格式
data:"", // 发送至服务器的数据
success: function (data) {
alert(data);
},
error:function(xhr,error,ex){
}
})
})
Ajax.ActionLink
为MVC封装ajax的框架。感觉局限性有点大,暂时不学
WebApi
使用restful风格的形式来获取数据,其主要难点在于给restful风格请求的命名,是否做到通俗易懂。
过滤器Filter
支持过滤器的类型有四种
- Authorization
- Action
- Result
- Exception
MVC的一些杂知识
- 在静态页面使用model中类的时候 用@using 引入
- MVC默认是即成了bootstrap可在content中看到
- 跳转静态页面基本上是通过路由来确定,也就是控制器加方法来跳转到静态页面,但如果是外部链接呢
- return view()返回的是视图,如果想返回方法用return Redirect()
-----------------------------------------------------------------------------2021/04/07
-----------------------一些想法:感觉MVC用处不大,但过滤器值得学习,现在基本上使用的是webapi