ASP.NET MVC 3 笔记
本文发布于 7 年前,部分内容可能已经失去参考价值。
语法示例
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 微软官方文档(英文)(一键翻译即可)