65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET MVC 工作中的重要技巧

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.39/5 (10投票s)

2017年10月25日

CPOL

9分钟阅读

viewsIcon

11912

在本文中,我们将探讨在使用 MVC5 工作时的一些重要技巧。这些技巧在实际操作 ASP.NET MVC 时非常有用。

引言

以下是在 ASP.NET MVC 项目中工作时的一些有用技巧:

  • MVC 中的 ViewEngine 用于生成 HTML(称为 Razor)。
  • HTML 5 中的 HTML 标签带有 lang="en" 来指定默认语言。
  • 带有 charset="utf-8" 的 Meta 标签,它指定了来自其他站点的跨站脚本不会损害我们的网站。
  • 带有 name="viewport" 的 Meta 标签用于移动设备。没有这个 meta 标签,移动设备会假设您的页面需要 900px 才能正确显示。有了这个 meta 标签,我们就告诉设备不要做任何假设。页面会自动适应设备的宽度。
  • 脚本标签 src="/Scripts/modernizr-2.5.3.js"。这支持 HTML5 标记可以在所有浏览器(甚至 IE-6)中工作。
  • Controller - 入站 HTTP 请求会转到控制器。
  • Model - Controller 负责调用 Model。Model 包含用户需要看到的所有信息。
  • View - Controller 选择 View 来显示 Model。它只是一个模板。
  • MVC - 这是一个设计模式,当您想分离组件的职责时,可以遵循它。
  • MVC 是可测试的。特别是,Controller 应该是可测试的。
  • 命名约定在 MVC 中起着重要作用。
  • View 具有 cshtml 扩展名。
  • ViewBag 是 MVC C# 中的动态类型对象。
  • Model 可以驻留在任何文件夹中,甚至在不同的项目中。
  • 路由引擎是 ASP.NET 的核心部分。它并不局限于 MVC。它可以用于 WebForms、WCF、WebServices 和 MVC。
  • 路由引擎 MapRoute API 为 URL、路由模式以及路由和默认参数提供了友好的名称。它的工作是检查 URL 并确定将其发送到何处进行处理。
  • Controller 调用 Action。查找特定的 ActionName 方法。
  • Razor View 是 cshtml 扩展名。可以将它们视为用于在标记中显示数据的标记。
  • 重计算逻辑不在 Views 中。
  • Views 自动处理 HTML 编码。
  • @{} 内部,我们可以在 View 中输出 C# 代码。
  • 在 View 的 C# 代码内部,如果我们想要一些静态文本或 HTML 文本,我们必须在要显示的文本前面使用 @:
  • RenderBody() 方法将渲染 .cshtml 页面以生成 UI 输出。
  • _ViewStart.cshtml 文件描述了应用程序的公共 Layout。
  • RenderSection() 方法用于渲染在 View 的任何位置定义的节。它也处理 Ajax。
  • Views 中的 HTML 帮助器有助于创建操作链接、编辑和验证等。
  • 匿名对象在 MVC 中被大量使用。
  • TryUpdateModel() 方法会经历 Model Binding 的过程。Model Binder 会查找 Update 并更新值。
  • 如何在 Views 中构建自定义逻辑?(需要深入研究)
  • Partial Views 用于在多个视图之间重用。
  • Html.Action() 帮助器可以在 _layout 中调用。它将调用一个子请求,进一步调用另一个 Controller,该 Controller 构建自己的 Model,独立于主 Controller 的操作,并渲染自己的视图,这是一个部分视图。它不是一个单独的 HTTP 请求。
  • Entity Framework 如何填充 Schema,可以通过使用 EF-Migration 来完成。EF 中的 Migrations 是一个工具,它允许使用 C# 代码配置 Schema,并可以使 Schema 与 C# 代码同步以进行任何更改。例如:在 PM 中,输入 Enable-Migration -ContentTypeName "DBclassname"
  • EF DbContext 中的 AddOrUpdate() 方法会自动检查记录是否存在,然后更新或插入它。
  • LinQ 查询是强类型的。也就是说,编译器和 VS 知道我们正在查询的数据类型。LinQ 使用 Comprehension Query Syntax 和 Extension Method Syntax(Lambda 表达式,也适用于自定义分页)。
  • Projection 可用于在 C# 代码的 Linq 查询中获取要列出的列。
  • 示例: Select aliasname;
  • 定义扩展方法的类必须是非泛型且静态的。
  • 每个扩展方法都必须是 static 方法。
  • 很多时候,我们的页面需要比我们的 Entity 更多信息。在这种情况下,我们使用 View-Model。Projection 在这里会很有帮助。
  • 使用 Comprehension expression 或 Extended expression 无论如何都不会影响查询性能。它只是编写相同查询的另一种方式。
  • 在开发过程中,我们应该非常清楚何时使用 "get" 方法,何时使用 "post" 方法。通常 get 操作是读取操作,post 操作是保存、更新、删除或在服务器上处理某些内容。
  • 在设计搜索页面时,我们可以使用 get 方法,因为它只是读取值并显示给用户。get 方法将输入包装在查询字符串中以处理请求。
  • ASP.NET MVC 按名称匹配请求中的内容。
  • Virtual 关键字将在运行时创建包装器。
  • 在 CRUD 操作之前,请检查 ModelState IsValid
  • 如果您不想更新任何特定字段,请使用 [Bind()] 属性,并带有 value Exclude="fieldname, 可以用逗号分隔"
  • 另一种实现相同目的的方法是使用 View-Model,它只包含其内部定义的属性。
  • DataAnotations 用于 Model 内部的验证。
  • 自定义验证属性可用于在不同页面上进行自定义验证。
  • 还实现 IValidatableObject interface
  • Scripts 文件夹中,有一个 _refrences.js 文件,它引用了常用的 js 文件。
  • knockout.js 用于 Model-View View-Model 设计模式。它提供了声明式数据绑定等脚本。
  • modernizer 文件用于检测并在各种浏览器上运行 HTML 5 功能。
  • jquery.in.js 是一个最小化的文件,没有注释或空格,以便浏览器可以更快地加载文件。
  • jquery.unobtrusive-ajax.js 充当 jQuery 和 ASP.NET MVC 之间的桥梁。它通过向 jquery 验证提供元数据来使用验证。
  • Bundling 可以在运行时将多个文件捆绑到一个文件中。在 Global.asaxApplication_Start 中,有 Bundle.config RegisterBundle
  • @Scripts.Render("~/bundles/modenizr")
  • 当我们在发布模式下运行应用程序时,浏览器只需要下载一个文件;而在调试模式下,所有捆绑的文件都可以单独下载。
  • Ajax.BeginForm 发起异步请求到服务器;而 BeginHtmlForm 发起同步请求到服务器,这意味着服务器会进行完全回发。
  • 在控制器内部,我们可以检查 if (Request.IsAjaxRequest()) {//do this}
  • 不显眼 JavaScript (unobtrusive JavaScript) 的 MVC 功能有三个。
  • 它们是 Ajax.BeginForm
  • Ajax.ActionLink -> 发起异步请求并更新屏幕,而不是将浏览器导航到新页面。
  • 客户端验证 -> 不显眼 JavaScript 意味着我们没有在 click 事件上写 JavaScript,因为那是显眼 js(obtrusive js),它也意味着即使 JavaScript 在我们的浏览器中被禁用,它也能工作,因为它的异步回发。
  • 使用 data- 属性,我们可以自定义处理 Ajax 的方式,使用客户端 JavaScript,以及自定义消息等。
  • Jquery 自动完成 UI 文档说,json 应该有一个 label 属性或 value,或者两者都有。
  • 对于自定义分页,我们使用 PagedListPagedList.Mvc
  • 身份验证:基于表单(需要 Cookie、SSL 来保证安全),OpenID/OAuth(第三方,如 Microsoft 或 Twitter),Windows 身份验证(Windows 操作系统与 Active Directory 和单点登录的身份验证)。
  • WebMatrix/WebSecurity 被用来借鉴标准 ASP.NET 的一些功能,如表单身份验证。
  • SimpleMemberShipProvider
  • 跨站请求伪造 -> [ValidateAntiForgeryToken]:将其放在所有提交表单上,也放在 cshtml 文件中 @Html.AntiForgeryToken()
  • ASP.NET MVC 通过 DotnetOpenAuth 支持 OpenID/OAuth。
  • OutputCache 可用于在服务器、客户端或服务器-客户端(通过在中间使用一些代理服务器)上缓存数据。
  • VaryByHeader="X-Requested-With" 用于 Ajax 请求。同时设置 Location=OutputCacheLocation.Server
  • 缓存的最佳测试地点是在生产环境中进行测试时。
  • 始终在 config 文件中使用 Cache Profile,而不是硬编码值。
  • 在使用资源文件时,请确保 resx 文件的访问修饰符设置为 Public,因为 Razor 文件是单独编译为 public 的,并且只有在文件是公共访问时才能访问 resx 文件。
  • VaryByHeader="X-Requested-With;Accept-Language" 用于处理多语言支持的资源文件。
  • 使用 elmah 进行错误处理。
  • 开始开发单元测试用例,与业务开发/QA 团队一起开发可能的测试用例并运行所有测试用例。
  • 部署和测试是开发 ASP.NET MVC 应用程序中最重要的部分。
  • 对于整个网站都使用的 CSS,我将其定义在 _Layout@RenderSection("Styles", false) 部分,如果我需要一些视图特定的样式,我会在每个视图中定义 Styles 部分:@section Styles {}
  • ASP.NET Web API 是一个在 .NET Framework 之上构建 Web API 的框架。
  • Controller 是一个处理 HTTP 请求的对象。
  • Web API 中的 Controller 从 ApiController 类派生,而不是从 Controllerclass 派生。
  • 您注意到的第一个主要区别是 Web API controller 中的 Action 不返回视图,它们返回数据。
  • getJSON 函数发送 AJAX 请求。响应将是一个 JSON 对象数组。getJSON 的第二个参数是一个回调函数,在请求成功完成后被调用。
  • 理解路由
  • 对于每个 HTTP 消息,ASP.NET Web API 框架通过查阅路由表来决定哪个 Controller 接收请求。
  • 当您创建一个新的 Web API 项目时,该项目包含一个默认路由,如下所示:/api/{controller}/{id}
  • {controller}{id} 部分是占位符。
  • 当框架看到匹配此模式的 URI 时,它会查找 Controller 方法来调用,如下所示:{controller} 匹配 Controller 名称。
  • HTTP 请求方法匹配方法名称。(此规则仅适用于 GETPOSTPUTDELETE 请求。){id},如果存在,则匹配名为 id 的方法参数。
  • 查询参数在可能的情况下匹配参数名称。
  • 在 ASP.NET Web API 中,Controller 是一个处理 HTTP 请求的类。Controller 的 public 方法称为 Action 方法或简称 Action。当 Web API 框架收到请求时,它会将请求路由到一个 Action。
  • 四个主要的 HTTP 方法(GETPUTPOSTDELETE)可以映射到 CRUD 操作,如下所示:
    • GET 检索指定 URI 处资源的表示。GET 不应对服务器产生副作用。
    • PUT 更新指定 URI 处的资源。如果服务器允许客户端指定新的 URI,PUT 也可用于在指定 URI 处创建新资源。在本教程中,API 不支持通过 PUT 进行创建。
    • POST 创建一个新资源。服务器分配新对象的 URI,并将其作为响应消息的一部分返回此 URI。
    • DELETE 删除指定 URI 处的资源。

    注意PUT 方法会替换整个产品实体。也就是说,客户端需要发送更新产品的完整表示。如果您想支持部分更新,建议使用 PATCH 方法。

  • 在 Web API 中,具有复杂类型的参数将从请求正文中反序列化。

看点

在使用 ASP.NET MVC 应用程序时,我们还会遇到许多其他重要要点。这些技巧在面试中也可能很有用。因此,在互联网上随时可以参考这些技巧是一个好习惯,以便在需要时可以随时查阅。

© . All rights reserved.