ASP.NET MVC 3 笔记
本文发布于 8 年前,部分内容可能已经失去参考价值。
语法示例
ASPX:
<ul>
<% foreach(var p in products) { %>
<li><%=p.Name%> ($<%=p.Price%>)</li>
<% } %>
</ul>Razor:
<ul>
@foreach(var p in products) {
<li>@p.Name ($@p.Price)</li>
}
</ul>代码块
ASPX: <% int a = 1; %>
Razor: @{ int a = 1; }渲染输出
经过 HTML 编码
ASPX: <span><%: model.Message %></span> Razor: <span>@model.Message</span>
未经 HTML 编码
ASPX: <span><%= model.Message %></span> Razor: <span>@Html.Raw(model.Message)</span>
代码与纯文本混合
ASPX:
<% if(foo) { %>
Plain Text
<% } %>Razor 写法一:多用于多行文本
@if(foo) {
<text>Plain Text</text>
}Razor 写法二:多用于单行文本
@if(foo) {
@:Plain Text
}@ 符号
<span>我在微博上@@了她</span>
自动识别 Email,不需要 @@
940534113@qq.com
显示渲染输出
如果变量被误识别为 Email,可以使用括号包围变量
<span>ISBN@(isbnNumber)</span>
服务端注释
@* 注释内容 *@
渲染输出动态方法
@(MyClass.MyMethod<AType>())
Razor 委托
复用视图逻辑
@{
Func<dynamic, object> b =
@<strong>@item</strong>;
}
@b("Bold this")布局文件 _Layout.cshtml
视图主体区域
@RenderBody()
创建预设区域
@RenderSection("名称", required: false)
使用预设区域
@section 名称 {...}视图入口文件 _ViewStart.cshtml
放置通用视图代码,譬如
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
视图中可重写覆盖 _ViewStart.cshtml 中的设置,譬如
@{
Layout = null;
}@ViewBag.Title 相当于 @ViewData["Title"]
一款将 ASPX 视图转换为 Razor 视图的软件:razor-converter
ActionResult
ContentResult
EmptyResult
FileResult
HttpStatusCodeResult
HttpNotFoundResult
HttpUnauthorizedResult
JavaScriptResult
JsonResult
RedirectResult
RedirectToRouteResult
ViewResultBase
PartialViewResult
ViewResult
NotFound()
OK(Model)
过滤器
规定请求方式
[HttpPost] [HttpGet]
Action 名称替身(不推荐)
[ActionName("另起一名")]授权验证
[Authorize] [Authorize(Roles="Admin")]
客户端验证
jquery.validate
远程验证
[Remote("验证的 Action 名", "控制器名", ErrorMessage="远程验证未通过")]用于远程验证的 Action 必须是 HttpGet 的,返回 JsonResult。
自验证
结合 ValidationContext 和 ValidationResult
保持视图中代码量最小化:
- 视图中不要含有数据处理的逻辑代码
- 视图中要避免包含大的代码块
- 构建多个视图/局部视图
- 适当使用 @helper 和 @function 语法
尽量使用特定的 Model 代替 ViewData / ViewBag!
@ViewData["Message"] => @Model.Message
Ajax Helper
jquery.unobtrusive-ajax.js
@Ajax.ActionLink("Home", "Index", new AjaxOptions { UpdateTargetId = "main" })
<a data-ajax="true" data-ajax-mode="relace" data-ajax=update="#main" href="/">Home</a>推荐插件
Elmah:记录所有异常日志,便于发现 Bug,提高用户体验
RouteDebugger:查看路由详情
Glimpse:类似浏览器 F12,提供服务端信息
MiniProfiler:监控各环节耗时,找出性能瓶颈
教程
ASP.NET MVC 微软官方文档(英文)(一键翻译即可)