ASP.NET MVC 面试问题
MVC 面试问题
如果您打算参加 .NET 面试,您可能还需要准备 ASP.NET MVC 面试问题。MVC 是用于为 .NET 和 C# 构建 Web 应用程序的框架。在本文中,我列出了前 50 个 MVC 问题及其答案。答案是 C# Corner 作者编写的代码示例。
1.什么是MVC(模型视图控制器)?
模型-视图-控制器 (MVC) 是一种用于实现用户界面的软件架构模式。它将给定的软件应用程序分为三个相互连接的部分,从而将信息的内部表示与向用户呈现或从用户处接受信息的方式分开。
MVC 是一个使用 MVC(模型视图控制器)设计构建 Web 应用程序的框架:
- 模型代表应用程序核心(例如数据库记录列表)。
- 视图显示数据(数据库记录)。
- 控制器处理输入(到数据库记录)。
MVC 模型还提供对 HTML、CSS 和 JavaScript 的完全控制。
MVC 模型定义了具有 3 个逻辑层的 Web 应用程序,
- 业务层(模型逻辑)
- 显示层(视图逻辑)
- 输入控制(控制器逻辑)
模型是应用程序的一部分,负责处理应用程序数据的逻辑。
模型对象通常从数据库检索数据(和存储数据)。
视图是应用程序中处理数据显示的部分。
最常见的是,视图是根据模型数据创建的。
控制器是应用程序中处理用户交互的部分。
通常,控制器从视图读取数据,控制用户输入,并将输入数据发送到模型。
MVC 分离有助于您管理复杂的应用程序,因为您可以一次专注于一个方面。例如,您可以专注于视图而不依赖于业务逻辑。它还使测试应用程序变得更容易。
MVC 分离还简化了团队开发。不同的开发人员可以并行处理视图、控制器逻辑和业务逻辑。
在这里了解有关 ASP.NET MVC 的更多信息: ASP.NET MVC 概述
2.MVC 有什么优点?
多视图支持
由于模型与视图的分离,用户界面可以同时显示相同数据的多个视图。
更改住宿
用户界面的变化往往比业务规则(不同的颜色、字体、屏幕布局以及对新设备(如手机或 PDA)的支持级别)更频繁,因为模型不依赖于视图,向系统添加新类型的视图通常不会影响模型。因此,更改范围仅限于视图。
SoC——关注点分离
关注点分离是 ASP.NET MVC 的核心优势之一。MVC 框架提供了 UI、业务逻辑、模型或数据的清晰分离。
更多控制
ASP.NET MVC 框架比传统的 Web 窗体提供了对 HTML、JavaScript 和 CSS 的更多控制。
可测试性
ASP.NET MVC 框架为 Web 应用程序提供了更好的可测试性,也为测试驱动开发提供了良好的支持。
轻的
ASP.NET MVC 框架不使用视图状态,因此在一定程度上减少了请求的带宽。
ASP.NET 的全部功能
使用 ASP.NET MVC 的一个主要优势是它建立在 ASP.NET 框架之上,因此 ASP.NET 的大多数功能(如成员资格提供程序、角色等)仍然可以使用。
这是有关使用 MVC 4.0 创建简单应用程序的详细文章 。
3.解释MVC应用程序生命周期?
任何 Web 应用程序都有两个主要执行步骤,首先理解请求,然后根据请求的类型发送适当的响应。MVC 应用程序生命周期没有什么不同,它有两个主要阶段,首先创建请求对象,其次将我们的响应发送到浏览器。
创建请求对象,
请求对象的创建主要有四个步骤。下面是详细的解释。
步骤 1 - 填写路线
MVC 请求被映射到路由表,路由表又指定要调用哪个控制器和操作。因此,如果请求是第一个请求,则第一件事就是用路由集合填充路由表。路由表的填充发生在 global.asax 文件中
第 2 步 - 获取路线
根据发送的 URL,“UrlRoutingModule”搜索路由表以创建“RouteData”对象,该对象包含要调用的控制器和操作的详细信息。
步骤 3 - 创建请求上下文
“RouteData”对象用于创建“RequestContext”对象。
步骤 4-创建控制器实例
该请求对象被发送到“MvcHandler”实例以创建控制器类实例。一旦创建了控制器类对象,它就会调用控制器类的“Execute”方法。
创建 Response 对象
此阶段有两个步骤:执行操作并最终将响应作为结果发送到视图。
这是有关ASP.Net MVC 生命周期的完整文章 。
4. 列出控制器操作方法的不同返回类型?
我们可以使用总共九种返回类型将结果从控制器返回到视图。
所有这些结果类型的基类型都是ActionResult。
查看结果 (视图)
此返回类型用于从操作方法返回网页。
PartialviewResult (部分视图)
此返回类型用于发送将在另一个视图中呈现的视图的一部分。
RedirectResult(重定向)
此返回类型用于根据 URL 重定向到任何其他控制器和操作方法。
RedirectToRouteResult(重定向到操作,重定向到路由)
当我们想要重定向到任何其他操作方法时使用此返回类型。
内容结果(内容)
此返回类型用于返回 HTTP 内容类型(如 text/plain)作为操作的结果。
jsonResult (json)
当我们想要返回 JSON 消息时使用此返回类型。
javascript结果 (javascript)
此返回类型用于返回将在浏览器中运行的 JavaScript 代码。
FileResult(文件)
此返回类型用于发送二进制输出作为响应。
空结果
此返回类型用于在结果中返回任何内容(void)。
这是有关 MVC 控制器的各种返回类型的完整文章 。
5.MVC 中的过滤器是什么?
在 MVC 中,控制器定义动作方法,这些动作方法通常与 UI 控件具有一对一的关系,例如单击按钮或链接等。例如,在我们之前的一个示例中,UserController 类包含方法 UserAdd、UserDelete 等。
但很多时候,我们希望在特定操作之前或之后执行一些操作。为了实现此功能,ASP.NET MVC 提供了在控制器的操作方法上添加操作前和操作后行为的功能。
过滤器的类型
ASP.NET MVC 框架支持以下动作过滤器,
- 动作过滤器 动作
过滤器用于实现在控制器动作执行之前和之后执行的逻辑。我们将在本章中详细介绍动作过滤器。 - 授权过滤器
授权过滤器用于实现控制器操作的身份验证和授权。 - 结果过滤器
结果过滤器包含在执行视图结果之前和之后执行的逻辑。例如,您可能希望在视图呈现到浏览器之前修改视图结果。 - 异常过滤器
异常过滤器是最后运行的过滤器类型。您可以使用异常过滤器来处理控制器操作或控制器操作结果引发的错误。您还可以使用异常过滤器来记录错误。
动作过滤器是最常用的过滤器之一,用于执行额外的数据处理,或操纵返回值,或取消动作的执行,或在运行时修改视图结构。
这是关于理解 MVC 中的过滤器的完整文章 。
6.MVC 中的 Action Filter 是什么?
答案 - 动作过滤器
操作过滤器是附加属性,可应用于控制器部分或整个控制器,以修改操作的执行方式。这些属性是从 System.Attribute 派生的特殊 .NET 类,可附加到类、方法、属性和字段。
ASP.NET MVC 提供了以下动作过滤器,
- 输出缓存
此操作过滤器会在指定的时间内缓存控制器操作的输出。 - 处理错误
此动作过滤器处理控制器动作执行时引发的错误。 - 授权
此操作过滤器使您能够限制特定用户或角色的访问。
现在我们将看到在示例控制器 ActionFilterDemoController 上应用这些过滤器的代码示例。(ActionFilterDemoController 仅用作示例。您可以在任何控制器上使用这些过滤器。)
输出缓存
代码示例
指定返回值缓存10秒。
在此处了解更多信息: 带有 Action Filters 的 ASP.NET MVC
7. 解释一下 MVC 中的路由是什么?路由中哪三个部分很重要?
路由是一种处理传入 URL 的机制,该机制更具描述性并能提供所需的响应。在这种情况下,URL 不会像以前的网站那样映射到特定文件或文件夹。
路由有两种类型(ASP.NET MVC 5 引入之后)。
- 基于约定的路由 - 为了定义这种类型的路由,我们调用 MapRoute 方法并设置其唯一名称、URL 模式并指定一些默认值。
- 基于属性的路由 - 为了定义这种类型的路由,我们在控制器的操作方法中指定 Route 属性。
路由是映射到处理程序的 URL 模式,路由负责处理特定 MVC 控制器的传入浏览器请求。换句话说,路由可帮助您定义 URL 结构并将 URL 映射到控制器。路由有三个重要部分,
- 控制器名称
- 动作方法名称
- 參數
代码示例
ControllerName/ActionMethodName/{ParamerName} 以及在 Global.asax 文件中编写的路线图编码。
在这里了解更多信息 - MVC 中的路由。
8. MVC 中的路由是什么? MVC 中的默认路由是什么?
路由是映射到处理程序的 URL 模式。处理程序可以是物理文件,例如 Web 窗体应用程序中的 .aspx 文件。处理程序也可以是处理请求的类,例如 MVC 应用程序中的控制器。要定义路由,您可以通过指定 URL 模式、处理程序以及路由名称(可选)来创建Route类的实例。
通过将 Route 对象添加到 RouteTable 类的静态 Routes 属性,可以将路由添加到应用程序。Routes 属性是一个 RouteCollection 对象,用于存储应用程序的所有路由。
通常,您无需编写代码来在 MVC 应用程序中添加路由。Visual Studio 的 MVC 项目模板包含预配置的 URL 路由。这些路由在 MVC Application 类中定义,该类在 Global.asax 文件中定义。
路线定义 | 匹配 URL 的示例 |
{控制器}/{动作}/{id} | /产品/展示/饮料 |
{表格}/详细信息.aspx | /产品/详细信息.aspx |
博客/{动作}/{条目} | /博客/显示/123 |
{报告类型}/{年}/{月}/{日} | /销售/2008/1/5 |
{区域}/{操作} | /美国/显示 |
{语言}-{国家}/{操作} | /en-US/显示 |
默认路由
默认的 ASP.NET MVC 项目模板添加了一个通用路由,该路由使用以下 URL 约定将给定请求的 URL 分为三个命名段。
网址: “{控制器}/{动作}/{id}”
此路线模式是通过调用 RouteCollection 的 MapRoute() 扩展方法来注册的。
9. 请说出Temp数据,View和View Bag之间的区别是什么?
在 ASP.NET MVC 中,有三种方法可以在控制器和视图之间传递/存储数据。
查看数据
- ViewData 用于将数据从控制器传递到视图。
- 它派生自ViewDataDictionary类。
- 它仅适用于当前请求。
- 需要对复杂数据类型进行类型转换并检查空值以避免错误。
- 如果发生重定向,则其值变为空。
查看包
- ViewBag 也用于将数据从控制器传递到相应的视图。
- ViewBag 是一个动态属性,利用了 C# 4.0 中的新动态功能
- 它也仅适用于当前请求。
- 如果发生重定向,则其值变为空。
- 它不需要对复杂数据类型进行类型转换。
临时数据
- TempData 派生自 TempDataDictionary 类
- TempData 用于将数据从当前请求传递到下一个请求
- 它保存 HTTP 请求时的信息。这意味着仅从一个页面到另一个页面。当我们从一个控制器移动到另一个控制器或从一个操作移动到另一个操作时,它有助于维护数据
- 它需要对复杂数据类型进行类型转换,并检查空值以避免错误。通常,它仅用于存储一次性消息,例如错误消息和验证消息
在此了解更多信息: ViewData、ViewBag 和 TempData 之间的区别
10. MVC 中的部分视图是什么?
部分视图是可以安全插入现有 DOM 的 HTML 块。部分视图最常见的用途是将 Razor 视图组件化,使其更易于构建和更新。部分视图也可以直接从控制器方法返回。在这种情况下,浏览器仍会接收文本/html 内容,但不一定是构成整个页面的 HTML 内容。因此,如果直接从浏览器的地址栏调用返回部分视图的 URL,则可能会显示不完整的页面。这可能类似于缺少标题、脚本和样式表的页面。但是,当通过脚本调用相同的 URL 并使用响应在现有 DOM 中插入 HTML 时,最终用户的净效果可能会更好、更美观。
部分视图是一种可重复使用的视图(如用户控件),可以嵌入到另一个视图中。例如,假设您网站的所有页面都有一个标准结构,其中包含左侧菜单、页眉和页脚,如下图所示,
在此处了解更多信息 - MVC 中的部分视图
11.解释一下View和Partial View的区别?
看法
- 它包含布局页面。
- 在呈现任何视图之前,先呈现 viewstart 页面。
- 视图可能有标记标签,如正文、HTML、标题、元等。
- 与局部视图相比,该视图并不是轻量级的。
部分视图
- 它不包含布局页面。
- 部分视图无法验证 viewstart.cshtml。我们无法将部分视图的通用代码放在 viewStart.cshtml.page 中。
- 部分视图是专门设计用于在视图内呈现的,因此它不包含任何标记。
- 我们可以将常规视图传递给RenderPartial方法。
在此处了解更多信息 - MVC 中的部分视图
12. MVC 中的 HTML 助手是什么?
使用 MVC,HTML 帮助程序非常类似于传统的 ASP.NET Web 表单控件。
就像 ASP.NET 中的 Web 表单控件一样,HTML 帮助器用于修改 HTML。但 HTML 帮助器更轻量。与 Web 表单控件不同,HTML 帮助器没有事件模型和视图状态。
在大多数情况下,HTML 助手只是一种返回字符串的方法。
使用 MVC,您可以创建自己的帮助器,或者使用内置的 HTML 帮助器。
标准 HTML 帮助程序
HTML 链接
呈现 HTML 链接的最简单方法是使用 HTML.ActionLink() 帮助程序。使用 MVC,Html.ActionLink() 不会链接到视图。它会创建指向控制器操作的链接。
ASP 语法
第一个参数是链接文本,第二个参数是控制器动作的名称。
上面的 Html.ActionLink() 助手输出以下 HTML:
Html.ActionLink() 帮助器有几个属性:
- 房源描述。
- .linkText 链接文本(标签)。
- .actionName 目标动作。
- .routeValues 传递给动作的值。
- .controllerName 目标控制器。
- .htmlAttributes 链接的属性集。
- .protocol 链接协议。
- .hostname 链接的主机名。
- .fragment 链接的锚点目标。
HTML 表单元素
以下 HTML 助手可用于呈现(修改和输出)HTML 表单元素:
- 开始表单()
- 结束表格()
- 文本区域()
- 文本框()
- 复选框()
- 单选按钮()
- 列表框()
- 下拉列表()
- 隐()
- 密码()
ASP.NET 语法 C#
在此处了解更多信息 - MVC 中的 HTML 助手:第 1 部分
13.解释 MVC 中基于属性的路由?
在 ASP.NET MVC 5.0 中,我们有了一个新的属性路由,通过使用“Route”属性,我们可以定义 URL 结构。例如,在下面的代码中,我们用路由属性修饰了“GotoAbout”操作。路由属性表示可以使用 URL 结构“Users/about”调用“GotoAbout”。
隐藏 复制代码
在此处了解更多信息 - ASP.Net MVC 5 中的基于属性的路由
14.MVC 中的 TempData 是什么?
TempData 是一个用于临时存储数据的字典对象。它是 TempDataDictionary 类类型,是 Controller 基类的实例属性。
TempData 能够在 HTP 请求期间保留数据,换句话说,它可以在两个连续的 HTTP 请求之间保留实时数据。它将帮助我们在操作方法之间传递状态。TempData 仅适用于当前和后续请求。TempData 使用会话变量来存储数据。TempData 用于检索数据时需要进行类型转换。
TempDataDictionary 继承自 IDictionary<string, object>、ICollection<KeyValuePair<string, object>>、IEnumerable<KeyValuePair<string, object>> 和 IEnumerable 接口。
例子
在这里了解更多信息 - 有关 MVC 中的 TempData 的所有信息
15.MVC 中的 Razor 是什么?
ASP.NET MVC 一直支持“视图引擎”的概念 - 它们是实现不同模板语法选项的可插入模块。ASP.NET MVC 的“默认”视图引擎使用与 ASP.NET Web 表单相同的 .aspx/.ascx/. 主文件模板。其他流行的 ASP.NET MVC 视图引擎是 Spart&Nhaml。
MVC 3 引入了一个名为 Razor 的新视图引擎。
为什么是 Razor?
- 紧凑而富有表现力。
- Razor 最大限度地减少了文件中所需的字符数和按键数,并实现了快速的编码工作流程。与大多数模板语法不同,您无需中断编码即可在 HTML 中明确表示服务器块。解析器足够智能,可以从您的代码中推断出这一点。这使得语法非常紧凑且富有表现力,简洁、快速且有趣。
- 易于学习:Razor 易于学习,让您能够以最少的努力快速提高工作效率。我们可以使用您现有的所有语言和 HTML 技能。
- 可与任何文本编辑器配合使用:Razor 不需要特定的工具,使您能够在任何普通的旧文本编辑器中高效工作(记事本就很好用)。
- 具有很强的智能感知能力:
- 可单元测试:新的视图引擎实现将支持对视图进行单元测试的能力(无需控制器或 Web 服务器,并且可以托管在任何单元测试项目中 - 无需特殊的应用域)。
在这里了解更多 - MVC3 简介
16. MVC 中的 Razor 和 ASPX 视图引擎有什么区别?
Razor 视图引擎 VS ASPX 视图引擎
Razor 视图引擎 | ASPX 视图引擎(Web 表单视图引擎) |
Razor View Engine 使用的命名空间是 System.Web.Razor | ASPX 视图引擎使用的命名空间是 System.Web.Mvc.WebFormViewEngine |
Razor 视图引擎使用的文件扩展名与 Web 表单视图引擎不同。它使用 cshtml 和 C# 以及 vbhtml 和 vb 来处理视图、部分视图、模板和布局页面。 | Web 表单视图引擎使用的文件扩展名类似于 ASP.Net Web 表单。它使用 ASPX 扩展名来查看部分视图或用户控件或模板的 aspc 扩展名以及布局/母版页的 master 扩展名。 |
Razor 视图引擎是 MVC 3.0 引入的高级视图引擎。这不是一种新语言,但它是一种标记。 | Web 表单视图引擎是默认视图引擎,从 MVC 开始就可用 |
Razor 的语法非常紧凑,可以帮助我们减少输入。 | Web 表单视图引擎具有与 ASP.Net 表单应用程序相同的语法。 |
Razor View Engine 使用 @ 来呈现服务器端内容。 | ASPX/web 表单视图引擎使用“<%= %>”或“<%: %>”来呈现服务器端内容。 |
默认情况下,@表达式的所有文本都是 HTML 编码的。 | 有一个不同的语法(“<%: %>”)可以使文本 HTML 编码。 |
Razor 不需要关闭代码块,Razor 视图引擎会自行解析,并能够在运行时决定哪个是内容元素、哪个是代码元素。 | Web 表单视图引擎要求代码块正确关闭,否则会引发运行时异常。 |
Razor 视图引擎通过在呈现视图之前对脚本或 HTML 标签进行编码来防止跨站点脚本 (XSS) 攻击。 | Web 表单视图引擎不能防止跨站点脚本 (XSS) 攻击。 |
Razor Engine 支持测试驱动开发 (TDD)。 | Web 表单视图引擎不支持测试驱动开发 (TDD),因为它依赖于 System.Web.UI.Page 类,从而使测试变得复杂。 |
Razor 使用“@* ... *@”进行多行注释。 | ASPX 视图引擎使用“<!--...-->”作为标记,使用“/* … */”作为 C# 代码。 |
Razor View Engine 只有三个过渡字符。 | Razor View Engine 只有三个过渡字符。 |
Razor 视图引擎比 ASPX 视图引擎慢一点。
结论
Razor 提供了一个新的视图引擎,其中包含用于集中模板的精简代码。Razor 的语法非常紧凑,提高了标记和代码的可读性。默认情况下,MVC 支持 ASPX(Web 表单)和 Razor 视图引擎。MVC 还支持第三方视图引擎,如 Spark、Nhaml、NDjango、SharpDOM 等。ASP.NET MVC 是开源的。
在此处了解更多信息 - ASPX 视图引擎 VS Razor 视图引擎
17.Razor 的主要语法规则是什么?
回答
- Razor 代码块括在 @{ ... } 中
- 内联表达式(变量和函数)以 @ 开头
- 代码语句以分号结尾
- 变量用 var 关键字声明
- 字符串用引号引起来
- C# 代码区分大小写
- C# 文件的扩展名为 .cshtml
C# 示例
在此处了解更多信息 - Microsoft ASP.NET MVC 3 Razor 视图引擎简介
18. 如何在 MVC 中实现表单身份验证?
回答
身份验证是通过使用用户名和密码或电子邮件和密码等凭证验证用户身份,从而授予用户访问特定服务的权限。它确保正确的用户已通过身份验证或登录特定服务,并且已根据特定用户的角色向其提供正确的服务,而这只不过是授权。
ASP.NET 表单身份验证在 IIS 身份验证完成后发生。您可以使用应用程序的 web.config 文件中的 forms 元素来配置表单身份验证。表单身份验证的默认属性值如下所示,
当调用 SetAuthCookie() 或 RedirectFromLoginPage() 方法时,FormsAuthentication 类会自动创建身份验证 cookie。身份验证 cookie 的值包含加密和签名的 FormsAuthenticationTicket 对象的字符串表示形式。
在此处了解更多信息 - MVC 5 中的表单身份验证:第 1 部分
19.解释 MVC 中的区域?
回答
从 ASP.Net MVC 2.0 开始,Microsoft 在 MVC 应用程序中提供了一个新功能,即区域。区域只是将大型应用程序的模块划分或“隔离”为多个或分离的 MVC 的一种方式。例如,
当您将区域添加到项目时,该区域的路由将在 AreaRegistration 文件中定义。该路由根据请求 URL 向该区域发送请求。要注册区域的路由,请将代码添加到 Global.asax 文件,该文件可以自动在 AreaRegistration 文件中查找区域路由。
区域注册.注册所有区域();
MVC 中区域的优点
- 允许我们将模型、视图和控制器组织到应用程序的单独功能部分,例如管理、计费、客户支持等等。
- 易于与其他区域创建的区域集成。
- 易于进行单元测试。
在此处了解更多信息 - ASP.Net MVC 中的区域是什么 - 第 6 部分
20. 解释一下 MVC 中显示模式的必要性?
回答
DisplayModes 为我们提供了上一节中介绍的默认功能之外的另一层灵活性。DisplayModes 还可以与上一功能一起使用,因此我们将简单地基于刚刚创建的网站进行构建。
使用显示模式涉及 2 个步骤
- 我们应该使用 Global.asax 文件中 Application_Start() 方法中的“DefaultDisplayMode”类为特定浏览器注册带有后缀的显示模式。
- 特定浏览器的视图名称应附加第一步中提到的后缀。
- 桌面浏览器(没有任何后缀。例如:Index.cshtml、_Layout.cshtml)。
- 移动浏览器(带有后缀“Mobile”。例如:Index.Mobile.cshtml、Layout.Mobile.cshtml)
如果您想要为不同的移动设备浏览器(任何不同的浏览器)设计不同的页面并根据浏览器的请求进行渲染。要处理这些请求,您可以注册自定义显示模式。我们可以使用 DisplayModeProvider.Instance.Modes.Insert(int index, IDisplayMode item) 方法来实现。
在此处了解更多信息 - MVC 5 应用程序中的显示模式提供程序
21.解释一下 MVC Scaffolding 的概念?
回答
ASP.NET Scaffolding 是 ASP.NET Web 应用程序的代码生成框架。Visual Studio 2013 包含预安装的 MVC 和 Web API 项目代码生成器。当您想要快速添加与数据模型交互的代码时,可以将脚手架添加到项目中。使用脚手架可以减少在项目中开发标准数据操作的时间。
脚手架由页面模板、实体页面模板、字段页面模板和过滤器模板组成。这些模板称为脚手架模板,可让您快速构建功能齐全的数据驱动网站。
脚手架模板
创造
它创建一个视图,帮助为模型创建新记录。它会自动为模型中的每个属性生成标签和输入字段。
删除
它从模型集合中创建记录列表以及带有删除记录的删除链接。
细节
它生成一个视图,显示 MVC 框架中模型的每个属性的标签和输入字段。
编辑
它创建一个带有表单的视图,以帮助编辑当前模型。它还为模型的每个属性生成一个带有标签和字段的表单。
列表
它通常借助列出模型集合中模型的 HTML 表来创建视图。它还会为模型的每个属性生成一个 HTML 表列。
在此处了解更多信息 - MVC 中的术语:第 3 部分(脚手架)
22. MVC 中的路由约束是什么?
回答
路由是 MVC 的一个很好的特性,它提供了一个非常容易记住的基于 REST 的 URL,并提高了搜索引擎中的页面排名。
本文不是对 MVC 中路由的介绍,但我们将学习路由的一些功能,通过实现它们,我们可以开发一个非常灵活且用户友好的应用程序。所以,让我们开始吧,不要浪费宝贵的时间。
为 URL 添加约束
当我们想要为 URL 添加特定约束时,这非常必要。例如,我们想要一个URL。
因此,我们想在主机名后设置一些约束字符串。好的,让我们看看如何实现它。
实现起来很简单,打开 RouteConfig.cs 文件,在里面找到路由定义,然后修改路由条目,如下图所示,我们可以看到之前已经添加了“abc”。
控制器名称,现在我们浏览的时候需要在URL中指定该字符串,如下所示:
在此处了解更多信息 - MVC 中的路由约束
23. MVC 中的 Razor 视图引擎是什么?
回答
ASP.NET MVC 一直支持“视图引擎”的概念,即实现各种模板语法选项的可插入模块。ASP.NET MVC 的“默认”视图引擎使用与 ASP.NET Web 窗体相同的 .aspx/.ascx/.master 文件模板。在本文中,我将介绍如何使用 Razor 视图引擎来创建应用程序的视图。“Razor”于 2010 年 6 月开始开发,并于 2011 年 1 月为 Microsoft Visual Studio 发布。
Razor 本身并不是一门新的编程语言,而是使用 C# 语法在页面中嵌入代码,无需 ASP.NET 分隔符:<%= %>。它是一个简单语法的视图引擎,作为 ASP.NET MVC 3 的一部分发布。Razor 文件扩展名为“cshtml”(C# 语言)。它支持 TDD(测试驱动开发),因为它不依赖于 System.Web.UI.Page 类。
在此处了解更多信息 - 在 MVC 3 中开始使用 Razor View Engine
24. MVC 中的输出缓存是什么?
回答
使用输出缓存的主要目的是显著提高 ASP.NET MVC 应用程序的性能。它使我们能够缓存任何控制器方法返回的内容,这样每次调用相同的控制器方法时就不需要生成相同的内容。输出缓存具有巨大的优势,例如它减少了服务器往返次数、减少了数据库服务器往返次数、减少了网络流量等。
请记住以下几点,
- 避免缓存每个用户独有的内容。
- 避免缓存很少访问的内容。
- 对于经常访问的内容使用缓存。
让我们举个例子。我的 MVC 应用程序在视图页面上显示数据库记录列表,因此默认情况下,每次用户调用控制器方法查看记录时,应用程序都会循环整个过程并执行数据库查询。这实际上会降低应用程序的性能。因此,我们可以利用“输出缓存”,避免每次用户调用控制器方法时都执行数据库查询。这里从缓存中检索视图页面,而不是调用控制器方法并执行冗余工作。
缓存内容位置
在上面的段落中我说,在输出缓存中,视图页面是从缓存中检索的,那么内容缓存/存储在哪里?
请注意,我们无法保证内容会按照我们指定的时间被缓存。当内存资源不足时,缓存将自动开始清除内容。
OutputCache 标签具有“位置”属性,并且完全可控。其默认值为“任意”,但有以下可用位置;截至目前,我们可以使用任何一个。
- 任何
- 客户
- 下游
- 服务器
- 没有任何
- 服务器和客户端
使用“Any”,输出缓存存储在处理请求的服务器上。建议的存储缓存始终非常小心地存储在服务器上。您将在以下“不要使用输出缓存”中了解一些与安全相关的提示。
在这里了解更多信息 - MVC 中的输出缓存
25. MVC 中的捆绑和最小化是什么?
回答
捆绑和压缩是为缩短请求加载时间而引入的两项新技术。它通过减少对服务器的请求数量和减小所请求资产(如 CSS 和 JavaScript)的大小来缩短加载时间。
捆绑
它让我们可以合并多个 JavaScript (.js) 文件或多个层叠样式表 (.css) 文件,以便它们可以作为一个单元下载,而不是发出单独的 HTTP 请求。
最小化
它会压缩空白并执行其他类型的压缩,以使下载的文件尽可能小。在运行时,该过程会识别用户代理,例如 IE、Mozilla 等,然后当请求来自 IE 时,会删除特定于 Mozilla 的内容。
了解更多信息 - 在 Visual Studio 2012 中捆绑和压缩或迁移现有网站
26. MVC 中的验证摘要是什么?
回答
ValidationSummary 辅助方法生成 ModelStateDictionary 对象中的验证消息的无序列表(ul 元素)。
ValidationSummary 可用于显示所有字段的所有错误消息。它还可用于显示自定义错误消息。下图显示了 ValidationSummary 如何显示错误消息。
ValidationSummary() 签名
MvcHtmlStringValidateMessage(bool excludePropertyErrors,字符串消息,对象 htmlAttributes)
使用 ValidationSummary 显示字段级错误消息
默认情况下,ValidationSummary 会过滤掉字段级错误消息。如果您希望将字段级错误消息显示为摘要,请指定excludePropertyErrors = false。
示例 - ValidationSummary 显示字段错误
@Html.ValidationSummary(false,“”,新{@class =“text-danger”})
因此现在,以下编辑视图将在顶部显示错误消息作为摘要。请确保您没有为每个字段设置 ValidationMessageFor 方法。
在此处了解更多信息 - 理解 MVC 中的验证 - 第 4 部分
27.使用实体框架的 MVC 中的数据库优先方法是什么?
回答
数据库优先方法是代码优先和模型优先方法的替代方案,用于实体数据模型,它从项目中的数据库创建模型代码(类、属性、DbContext 等),并且这些类充当数据库和控制器之间的链接。
有以下方法用于将数据库连接到应用程序。
- 数据库优先
- 模型优先
- 代码优先
数据库优先只不过是一种创建 Web 应用程序的方法,其中数据库首先可用并且可以与数据库交互。在这个数据库中,首先创建数据库,然后我们管理代码。实体框架能够根据关系数据库中的表和列生成业务模型。
在此处了解更多信息 - 使用 ASP.NET MVC 逐步实现数据库优先方法第 1 部分
28. MVC 应用程序解决方案中的文件夹是什么?
答案 - 了解文件夹
创建项目时,会默认在项目名称下创建一个文件夹结构,可在解决方案资源管理器中看到。下面我将简要说明这些文件夹的用途。
模型
此文件夹包含用于提供数据的类。这些类可以包含从数据库检索的数据或用户在表单中插入以更新数据库的数据。
控制器
这些类将执行用户调用的操作。这些类包含称为“操作”的方法,这些方法可对用户操作做出相应响应。
视图
这些是使用模型类数据填充 HTML 控件并将其呈现给客户端浏览器的简单页面。
应用程序启动
包含 FilterConfig、RoutesConfig、WebApiConfig 等类。现在我们需要了解 RouteConfig 类。此类包含应在浏览器中提供的 URL 的默认格式,以导航到指定的页面。
29. MVC 和 Web Forms 有什么区别?
答案 - ASP.Net MVC / Web Forms 区别
以下是一些区别。
ASP.Net MVC | ASP.Net Web 表单 |
视图和逻辑是分开的,它具有关注点分离理论。MVC 3 及更高版本将 .aspx 页面作为 .cshtml。 | 没有关注点分离;视图与逻辑紧密耦合(.aspx.cs /.vb 文件)。 |
引入了基于路由的 URL 路由概念。例如,在 Global.asax 中声明路由。 | 基于文件的路由。重定向基于页面。 |
支持 Razor 语法以及 .aspx | 仅支持 Web 表单语法。 |
状态管理通过 Tempdata、ViewBag 和 View Data 进行处理。由于控制器和视图不相互依赖,而且 ASP.NET 中没有视图状态概念,因此 MVC 可保持页面轻量级。 | 通过视图状态处理状态管理。视图状态越大,换句话说,页面大小就越大。 |
部分视图 | 用户控件 |
HTML 帮助程序 | 服务器控件 |
多个页面可以有相同的控制器来满足其需求。一个控制器可以有多个Action(控制器类内的方法名称)。 | 每个页面都有自己的代码,换句话说,直接依赖于代码。例如,Sachin.aspx 依赖于 Sachin.aspx.cs(后台代码)文件。 |
单元测试比 ASP.Net Web 表单容易得多,因为 Web 表单和代码是单独的文件。 | 直接依赖、紧密耦合会在测试中引发问题。 |
布局 | 主页 |
30. MVC 中处理错误的方法有哪些?
回答
任何应用程序都可能需要异常处理,无论是 Web 应用程序还是 Windows 窗体应用程序。
ASP.Net MVC 有一个名为“HandleError”的属性,它提供了内置的异常过滤器。ASP.NET MVC 中的 HandleError 属性可以应用于操作方法以及 Controller 或全局级别。HandleError 属性是 IExceptionFilter 的默认实现。当我们创建 MVC 应用程序时,HandleError 属性会添加到 Global.asax.cs 文件中并在 Application_Start 事件中注册。
HandleError 属性的重要属性
HandleError 错误属性有几个在处理异常时非常有用的属性。
异常类型
要捕获的异常类型。如果未指定此属性,则 HandleError 过滤器将处理所有异常。
看法
显示异常信息的视图页面名称。
掌握
用于显示异常的主视图。
命令
执行操作过滤器的顺序。Order 属性具有一个整数值,它指定从 1 到任何正整数值的优先级。1 表示最高优先级,整数值越大,过滤器的优先级越低。
允许多个
它指示是否可以指定错误过滤器属性的多个实例。
例子
操作方法级别的 HandleError 属性,
以下是有关 使用 HandleError 属性在 ASP.Net MVC 中进行异常或错误处理的更多详细信息。
31. 在 MVC 中,我们如何将数据从控制器传递到视图?
回答
在模型视图控制器 (MVC) 中,有三种选项可用于将数据从控制器传递到视图。本文尝试通过示例解释 ViewData、ViewBag 和 TempData 之间的区别。ViewData 和 ViewBag 类似,而 TempData 承担了额外的责任。以下是这三个对象的关键点。
查看数据
- ViewData 用于将数据从控制器移动到视图。
- ViewData 是从“ViewDataDictionary”类派生的对象字典,可以使用字符串作为键来访问。
- 当发生重定向时,ViewData 包含空值。
- ViewData 需要对复杂数据类型进行类型转换。
查看包
- ViewBag 只是 ViewData 的一个动态包装器,仅存在于 ASP.NET MVC 3 中。ViewBag 是一个动态属性,它利用了 C# 4.0 中的新动态功能。
- ViewBag 不需要对复杂数据类型进行类型转换。
- 当发生重定向时,ViewBag 也包含一个空值。
临时数据
- ViewData 将数据从控制器移动到视图。
- 仅在需要数据可用于下一个请求时使用 TempData。在下一个请求中,它将存在,但之后将消失。
- TempData 用于将数据从当前请求传递到后续请求,即在重定向的情况下。这意味着 TempData 的值不会为空。
在此处了解更多信息 - 在 MVC 4 中将数据从控制器传递到视图的各种方法
32.MVC 中的脚手架是什么?
回答
Scaffolding 是 ASP.NET Web 应用程序的代码生成框架。Visual Studio 2013 包含预安装的 MVC 和 Web API 项目代码生成器。当您想要快速添加与数据模型交互的代码时,可以将 scaffolding 添加到项目中。使用 scaffolding 可以减少在项目中开发标准数据操作的时间。
先决条件
要使用 ASP.NET 脚手架,您必须具有
- Microsoft Visual Studio 2013
- Web 开发人员工具(Visual Studio 2013 默认安装的一部分)
- ASP.NET Web 框架和工具 2013(Visual Studio 2013 默认安装的一部分)
使用脚手架有哪些优点?
- 使用最少的代码或者不需要代码来创建数据驱动的 Web 应用程序。
- 开发时间快。
- 功能齐全的页面,包括显示、插入、编辑、删除、排序和分页功能。
- 基于数据库模式的内置数据验证。
- 为每个外键或布尔字段创建的过滤器。
了解更多信息 - MVC 5 中的脚手架
33.什么是ViewStart?
回答
Razor View Engine 引入了一个名为 _ViewStart 的新布局,该布局会自动应用于所有视图。Razor View Engine 首先执行 _ViewStart,然后开始渲染其他视图并合并它们。
Viewstart 示例
在此处了解更多信息 - ASP.NET MVC 3 中的 Viewstart Page
34.MVC 中的 JsonResultType 是什么?
回答
控制器上的操作方法返回 JsonResult(JavaScript 对象表示法结果),可用于 AJAX 应用程序。此类继承自“ActionResult”抽象类。这里提供了一个必须可序列化的参数 Json。将指定对象序列化为 JSON 格式的 JSON 结果对象。
在此处了解更多信息 - MVC 3.0 中的 ActionResult 返回类型
35.什么是TempData?
答案-Tempdata
- TempData 是从 TempDataDictionary 类派生的字典对象。
- TempData 用于将数据从当前请求传递到后续请求,换句话说,用于重定向的情况。
- TempData 的寿命非常短并且其值只能保留很短的一段时间。
- 它需要对复杂数据类型进行类型转换,正如我在示例中所使用的那样:
- 您可以使用 Keep 方法保留其值以供后续请求。
36.如何使用ViewBag?
回答
ViewBag 是动态属性,利用了 C# 4.0 中的新动态功能。它还用于将数据从控制器传递到视图。简而言之,ViewBag 属性只是 ViewData 的包装器,它将 ViewData 字典公开为动态对象。现在在“DisplayDataController”控制器中创建一个操作方法“StudentSummary”,将 Student 类对象存储在 ViewBag 中。
随后创建一个显示学生对象数据的视图 StudentSummary(“StudentSummary.cshtml”)。ViewBag 不需要对复杂数据类型进行类型转换,因此您可以直接从 ViewBag 访问数据。
这里我们使用了另一个东西“ViewBag.Title”,它显示页面的标题。
在此处了解更多信息 - 在控制器视图上显示数据
37.ViewBag 和 ViewData 有什么区别?
答案——ViewBag 和 ViewData 之间的区别?
- ViewData 是一个对象字典,它派生自 ViewDataDictionary 类,可以使用字符串作为键进行访问。
- ViewBag 是一个动态属性,它利用了 C# 4.0 中的新动态功能。
- ViewData 需要对复杂数据类型进行类型转换并检查空值以避免错误。
- ViewBag 不需要对复杂数据类型进行类型转换。
- ViewBag 的调用是:
ViewBag.Name = "Yogesh";
ViewData 的调用是:
ViewData["Name"] = "yogesh";
在这里了解更多 - MVC 中 ViewBag 和 ViewData 之间的区别
38. MVC 中的数据注释验证器属性是什么?
答案 - 使用数据注释验证器属性
在设计模型本身时,DataAnnotation 在添加属性验证方面起着至关重要的作用。可以为客户端和服务器端添加此验证。
您了解,使用属性修饰模型中的属性可以使该属性符合验证条件。
下面给出了一些用于验证的 DataAnnotation,
- 必填
项根据需要指定属性。
[Required(ErrorMessage="CustomerName 是必填项")] - RegularExpression
指定用于验证属性值的正则表达式。
[RegularExpression("[az]", ErrorMessage = "Invalid character")] - 范围
指定检查属性值的值范围。
[Range(1000,10000,ErrorMessage="范围应介于 1k 和 10k 之间")] - StringLength
指定字符串属性的最小和最大长度。
[StringLength(50, MinimumLength = 5, ErrorMessage = "最小字符为 5,最大字符为 10")] - MaxLength
指定属性值的最大长度。
[MaxLength(10,ErrorMessage="客户代码超出")] - MinLength
用于检查最小长度。
[MinLength(5, ErrorMessage = “客户代码太小”)]
在此处了解更多信息 - 在 MVC 中添加自定义验证
39. 我们如何在 MVC 中制作自定义错误页面?
回答
HandleErrorAttribute 允许您使用自定义页面来处理此错误。首先,您需要更新 web.config 文件以允许您的应用程序处理自定义错误。
然后,你的操作方法需要用该属性进行标记。
通过调用 ThrowException 操作,这会将用户重定向到默认错误页面。但在我们的例子中,我们想使用自定义错误页面并将用户重定向到那里。所以,让我们创建新的自定义视图页面。
接下来,我们只需更新操作方法上的 HandleErrorAttribute。
在此了解更多信息 - ASP.NET MVC 中的自定义错误页面
40. MVC 中的服务器端验证?
回答
ASP.NET MVC 框架会验证传递给正在执行的控制器操作的所有数据,它会将发现的所有验证失败信息填充到 ModelState 对象中,并将该对象传递给控制器??。然后,控制器操作可以查询 ModelState 以发现请求是否有效并做出相应反应。
在本文中,我将使用两种方法来验证模型数据。一种是手动向 ModelState 对象添加错误,另一种是使用数据注释 API 来验证模型数据。
方法 1 - 手动将错误添加到 ModelState 对象
我在 Models 文件夹下创建了一个 User 类。User 类有两个属性“Name”和“Email”。Name 字段有必填字段验证,而 Email 字段有 Email 验证。让我们看看实现验证的过程。创建 User 模型,如下所示,
之后,我在 User Controller(Controllers 文件夹下的 UserController.cs)中创建了一个控制器操作。该操作方法具有对 Email 字段上的 Name 和 Email 验证所需的逻辑。我在 ModelState 上添加了一个带有键的错误消息,只要模型中的数据未得到验证,该消息就会显示在视图上。
此后,我在 User 文件夹下为用户输入创建一个视图(Index.cshtml)。
41. MVC 中的远程验证有什么用?
回答
远程验证是我们将特定数据发布到服务器而不将整个表单数据发布到服务器的过程。让我们看一个实际场景,在我的一个项目中,我需要验证电子邮件地址,无论它是否已经存在于数据库中。远程验证对此很有用;无需发布所有数据,我们就可以仅验证用户提供的电子邮件地址。
实用解释
让我们创建一个 MVC 项目并相应地命名它,对我来说它是“TestingRemoteValidation”。创建项目后,让我们创建一个名为 UserModel 的模型,如下所示:
让我们了解一下所使用的远程属性,因此第一个参数“CheckExistingEmail”是操作的名称。第二个参数“Home”称为控制器,因此为了验证 UserEmailAddress 的输入,将调用“Home”控制器的“CheckExistingEmail”操作,第三个参数是错误消息。让我们在我们的主控制器中实现“CheckExistingEmail”操作结果。
了解更多信息 - MVC 中的远程验证
42. MVC 中的异常过滤器是什么?
回答
异常是应用程序不可或缺的一部分。它们对应用程序来说既是福音又是禁令。不是吗?这会引起争议,对于开发人员来说,它可以帮助他们跟踪应用程序中的轻微和重大缺陷,有时当用户每次都进入死机黄屏时,他们会感到沮丧。这会让用户对应用程序感到平淡无奇。因此,为了避免这种情况,开发人员会处理异常。但有时仍会有一些未处理的异常。
现在该为他们做些什么呢? MVC 为我们提供了内置的“异常过滤器”,我们将在这里进行解释。
抄送:Google
开始吧!
可以说,黄屏死机就像是我们的应用程序出现故障。
立即开始
当某些异常未得到处理并从调用的操作中抛出时,异常过滤器将运行。异常的原因可以是任何原因,异常的来源也可以是任何原因。
创建异常过滤器
自定义异常过滤器必须实现builtinIExceptionFilter接口。该接口如下所示,
每当遇到未处理的异常时,就会调用 OnException 方法。参数如我们所见,ExceptionContext 派生自 ControllerContext,并具有许多内置属性,可用于获取有关导致异常的请求的信息。它们的属性 ExceptionContextpassess 如下表所示:
姓名 | 类型 | 细节 |
结果 | 动作结果 | 被调用的操作返回的结果。 |
例外 | 例外 | 应用程序操作导致的未处理的异常。 |
异常处理 | 布尔值 | 这是一个非常方便的属性,它根据异常是否由应用程序中的任何过滤器处理来返回布尔值(true/false)。 |
操作抛出的异常由 Exception 属性详细说明,一旦处理(如果),则可以切换属性 ExceptionHandled,以便其他过滤器知道异常是否已处理并取消其他过滤器的处理请求。问题是,如果异常未得到处理,则默认的 MVC 行为将显示可怕的死机黄屏。对用户来说,这会给用户留下深刻的印象,更重要的是,它将应用程序的方便和安全信息暴露给可能有黑客的外界,然后应用程序就会走上地狱之路。因此,需要非常小心地处理异常。让我们展示一个小的自定义异常过滤器。此过滤器可以存储在解决方案的 Web 项目中的 Filters 文件夹中。让我们添加一个名为 CustomExceptionFilter.cs 的文件/类。
在此处了解更多信息 - MVC 中的异常过滤器
43. 什么是 MVC HTML Helpers 及其方法?
回答
辅助方法用于在视图中呈现 HTML。辅助方法生成作为视图一部分的 HTML 输出。它们比使用 HTML 元素更具优势,因为它们可以在视图之间重复使用,并且需要的编码更少。有几种内置辅助方法可用于为一些常用的 HTML 元素生成 HTML,例如表单、复选框、下拉列表等。我们还可以创建自己的辅助方法来生成自定义 HTML。首先,我们将了解如何使用内置辅助方法,然后我们将了解如何创建自定义辅助方法。
标准 HtmlHelper 方法
一些标准的辅助方法包括:
- ActionLink:呈现一个锚点。
- BeginForm:呈现 HTML 表单标签
- CheckBox:呈现复选框。
- DropDownList:呈现下拉列表。
- 隐藏:呈现隐藏字段
- ListBox:呈现列表框。
- 密码:呈现用于输入密码的文本框
- RadioButton:呈现单选按钮。
- TextArea:呈现文本区域。
- TextBox:呈现文本框。
在此了解更多信息 - ASP.NET MVC 中的 HtmlHelper 方法
44. 在 MVC 中定义控制器?
回答
控制器向视图提供模型数据,并解释用户操作(例如按钮点击)。控制器依赖于视图和模型。在某些情况下,控制器和视图是同一个对象。
控制器文件夹
Controllers 文件夹包含负责处理用户输入和响应的控制器类。MVC 要求所有控制器的名称都以“Controller”结尾。
在我们的示例中,Visual Web Developer 创建了以下文件:HomeController.cs(用于主页和关于页面)和AccountController.cs(用于登录页面):
在这里了解更多信息 - ASP.Net MVC 控制器
45. 解释 MVC 中的模型?
回答
模型代表数据,不做任何其他事情。模型不依赖于控制器或视图。MVC 模型包含除纯视图和控制器逻辑之外的所有应用程序逻辑(业务逻辑、验证逻辑和数据访问逻辑)。使用 MVC,模型既可以保存应用程序数据,也可以操纵应用程序数据。
模特文件夹
模型文件夹包含代表应用程序模型的类。
Visual Web Developer 自动创建一个包含应用程序安全模型的 AccountModels.cs 文件。
在此处了解更多信息 - ASP.Net MVC 中的模型:第 1 部分
46. 解释 MVC 中的视图?
回答
视图负责向用户展示全部或部分数据。简单来说,我们在输出屏幕上看到的一切都是视图。
视图文件夹
Views 文件夹存储与应用程序显示(用户界面)相关的文件(HTML 文件)。这些文件的扩展名可能是 html、asp、aspx、cshtml 和 vbhtml,具体取决于语言内容。
Views 文件夹包含每个控制器的一个文件夹。Visual Web Developer 创建了一个 Account 文件夹、一个 Home 文件夹和一个 Shared 文件夹(位于 Views 文件夹内)。Account 文件夹包含用于注册和登录用户帐户的页面。Home 文件夹用于存储应用程序页面,例如主页和关于页面。Shared 文件夹用于存储控制器之间共享的视图(母版页和布局页)。
在此了解更多信息 - ASP.Net MVC View
47. MVC 中的属性路由是什么?
回答
路由属性是在操作方法之上定义的。以下是路由属性的示例,其中在定义操作方法的位置定义了路由。
在下面的例子中,我在操作方法之上定义了路由属性
具有可选参数的属性路由
我们还可以在 URL 模式中定义可选参数,方法是在路由参数中定义一个标记(“?”)。我们还可以使用参数=值来定义默认值。
在此处了解更多信息 - ASP.Net MVC 5.0 中的属性路由
48. 解释一下 MVC 中的 RenderSection?
回答
RenderSection() 是 WebPageBase 类的一个方法。Scott 曾经写道,“RenderSection()”辅助方法的第一个参数指定了我们想要在布局模板中的该位置呈现的部分的名称。第二个参数是可选的,允许我们定义我们呈现的部分是否是必需的。如果某个部分是“必需的”,那么如果该部分未在基于布局文件的视图模板中实现(这可以更轻松地跟踪内容错误),Razor 将在运行时抛出错误。它返回要呈现的 HTML 内容。
在此处了解更多信息 - ASP.Net MVC 4 - Razor 中的布局和部分
49.什么是 GET 和 POST 操作类型?
回答
得到
GET 用于从指定资源请求数据。对于所有 GET 请求,我们都会传递 URL,这是必需的,但它可以承受以下过载。
.get(url [, 数据 ] [, 成功(数据, textStatus, jqXHR) ] [, 数据类型 ] ).done/.fail
邮政
POST 用于将要处理的数据提交给指定资源。对于所有 POST 请求,我们都会传递必需的 URL 和数据,但它可能会出现以下过载。
.post(url [, 数据 ] [, 成功(数据, textStatus, jqXHR) ] [, 数据类型 ] )
在此处了解更多信息 - MVC 中对控制器方法的 GET 和 POST 调用
50. MVC 6 有什么新功能?
回答
在 MVC 6 中,微软从 MVC6 中删除了 System.Web.Dll 的依赖,因为它非常昂贵,通常每个请求和响应会消耗 30k 内存,而现在 MVC 6 每个请求只需要 2k 内存,并且响应的内存消耗非常小。
使用云优化框架的优势在于,我们可以将 Mono CLR 的副本包含在您的网站中。为了某个网站,我们不需要升级整个机器上的 .NET 版本。不同网站的 CLR 版本可以并行运行。
MVC 6 是 ASP.NET 5 的一部分,专为云优化应用程序而设计。当我们的 MVC 应用程序部署到云时,运行时会自动选择正确的库版本。
核心 CLR 也应该进行高资源效率的优化。
微软制作了许多 MVC、Web API、WebPage 和 SignalLrpeices,我们称之为 MVC 6。
大多数问题都是使用 Roslyn 编译器解决的。在 ASP.NET vNext 中使用 Roslyn 编译器。使用 Roslyn 编译器,我们不需要编译应用程序,它会自动编译应用程序代码。您将编辑代码文件,然后可以通过刷新浏览器查看更改,而无需停止或重建项目。
在 IIS 以外的主机上运行
当我们使用 MVC5 时,我们可以将其托管在 IIS 服务器上,也可以在 ASP.NET Pipeline 之上运行它,另一方面,MVC 6 有一个使其更好的功能,该功能本身托管在 IIS 服务器和自用户管道上。
基于环境的配置系统
配置系统提供了一个环境,可轻松在云上部署应用程序。我们的应用程序就像配置提供程序一样工作。它有助于从各种配置源(如 XML 文件)中检索值。
MVC 6 包含一个新的基于环境的配置系统。与其他系统不同,它在上一版本中仅依赖于 Web.Config 文件。
依赖注入
使用 IServiceProvider 接口我们可以轻松添加自己的依赖注入容器。我们可以用自己的容器替换默认实现。
支持 OWIN
我们可以完全控制 MVC 6 应用程序中的可组合管道。MVC 6 支持 OWIN 抽象。