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

自动识别 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 微软官方文档(英文)(一键翻译即可)

ASP.NET MVC 3 开发实践系列课程

xoyozo 8 年前
转载请注明出处
可能相关的内容