C#开发笔记
02、入门
03、进阶
04、架构
01、知识概念
01、基础语法
02、面向对象
03、集合、异常、泛型、LINQ、委托、EF
04、多线程
05、WPF
06、ASP.NET MVC
07、ASP.NET Core
08、ADO.NET、XML、HTTP、AJAX、WebService
09、常见的算法
10、数据库概念知识
11、数据库SQL查询(附建表语句)
00、高阶
05、U3D
01、基础
001、问的比较多的问题
06、前端开发
001、CSS基础
本文档使用 MrDoc 发布
-
+
首页
06、ASP.NET MVC
#### 1.MVC 中的 TempData\\ViewBag\\ViewData 区别? **TempData 保存在 Session 中,Controller 每次执行请求的时候,会从 Session 中先获取 TempData,而后清除 Session,获取完 TempData 数据,虽然保存在内部字典对象中,但是其集合中的每个条目访问一次后就从字典表中删 除,ViewData 存的是 Key/Value 字典,使用时需要类型转换。** **ViewBag 和 ViewData 只在当前 Action 中有效,等同于 View,ViewBag 比 ViewData 慢,ViewBag 存 dynamic 类型数据,使用时不需要类型转换** **ViewData 和 ViewBag 中的值可以互相访问,因为 ViewBag 的实现中包含了 ViewData,ViewData 存的是 Key/Value 字典,使用时需要类型转换** #### 2.阐述下 MVC 框架的机制,各个模块的作用? **所谓模型,就是 MVC 需要提供的数据源,负责数据的访问和维护。** **所谓视图,就是用于显示模型中数据的用户界面。** **所谓控制器,就是用来处理用户的输入,负责改变模型的状态并选择适当的视图来显示模型的数据。** #### 3.ASP.NET 和 ASP.NET MVC 的关系? **ASP.NET MVC 是在核心 ASP.NET 基础之上构建的,从 mvc 命名空间 System.Web.Mvc 就能看出,因为 System.Web 是 Asp.NET 的核心命名空间。** **比如 ASP.NET MVC 依赖于 HttpHandler,关于请求是怎么进入控制器的,其实就是用到了 HttpHandler** **Session、Cookie、Cache 和 Application 这些 ASP.NET 的对象保存机制在 MVC 中依然是需要用到的** **HttpContext、Request、Response、Server 对象在 MVC 中仍然可以使用,在 Controller 中通过智能感知的形式很容易得到这些对象** #### 4. MVC 对 ASP.NET 好处在哪里? **提供非常清晰的成绩管理,像 ui 层,也就是 view, 数据层 model 和管理层 controller。** **单元测试比较容易。** **改善了数据模型和视图的重用性。** **代码的结构更加优化。** #### 5.什么是 razor view engine? **这个引擎提供了数据绑定的显示模板。** ```plain @model MvcStore.Models.Customer @{ViewBag.Title="Get Customers";} <div class="cust"><h3><em>@Model.CustomerName</em></h3></div> ``` #### 6.view bag 和 view data 之间的区别是什么? **view bag 是 view data 的一个扩展。扩展以后可以创建动态的属性。这样的好处有:** **不需要进行类型的转换。** **我们可以使用 dynamic 关键字。** **但是有一个缺点就是 view bag 要比 view data 慢一些。** #### 7.解释一下 sections? **Sections 是 html 页面的一部分。** ```plain @rendersection("testsection") ``` **在子页面中我们定义如下的 sections。** ```plain @section testsection { <h1>test content</h1> } ``` **如果这个 section 没有定义的话会出错,我们可以使用一个 required 属性来防止页面出错。** ```plain @rendersection("testsection", required: false) ``` #### 8.为什么要使用 html.partial? **这个方法用来显示 html string 指定的某块视图。** ```plain html.partial("testpartialview") ``` #### 9.什么是 partial view? **Partial view 相当于传统网页表格中的 user controls.** **它的主要目的是为了重复使用这些视图,他们一般被放在一个共享文件夹里面。** ```plain html.partial() html.renderpartial() ``` #### 10.MVC 同时适用于 Windows 应用和 Web 应用吗? **相比 Windows 应用,MVC 架构更适用于 Web 应用。对于 Windows 应用,MVP(Model View Presenter )架构更好一点。如果你使用 WPF 和 Silverlight,MVVM 更适合。** #### 11.在 MVC 中如何保持 Sessions? **可以通过三种方式保持: tempdata, viewdata, 和 viewbag。** #### 12.已经有了 ASPX,为什么还要 Razor? **相比 ASPX,Razor 是一个干净的、轻量级的和语法更简单。例如,ASPX 去显示时间:** ```plain <%=DateTime.Now%> ``` **在 Razor 中,只需要一行:** ```plain @DateTime.Now ``` #### 13.在 MVC 中如何去执行 Windows 认证? **你需要修改 web.config 文件,并设置验证模式为 Windows。** ```plain <authentication mode="Windows"/> <authorization> <deny users="?"/> </authorization> ``` **然后在 controlle 或 action 中,你可以使用 Authorize 属性,指定哪个用户可以访问这个 controller 或 action。下面的代码设置到只有指定的用户可以访问它。** ```plain [Authorize(Users= @"WIN-3LI600MWLQN\Administrator")] public class StartController : Controller { // // GET: /Start/ [Authorize(Users = @"WIN-3LI600MWLQN\Administrator")] public ActionResult Index() { return View("MyView"); } } ``` #### 14.在 MVC 中如何用表单认证? **表单认证和 ASP.NET 的表单验证一样。第一步是设置认证模式为 Forms。loginUrl 是指向到 controller,而不是一个页面。** ```plain <authentication mode="Forms"> <forms loginUrl="~/Home/Login" timeout="2880"/> </authentication> ``` **我们也需要创建一个 controller,去验证用户。如果验证通过,需要设置 cookies 值。** ```plain public ActionResult Login() { if ((Request.Form["txtUserName"] == "Shiv") && (Request.Form["txtPassword"] == "Shiv@123")) { FormsAuthentication.SetAuthCookie("Shiv",true); return View("About"); } else { return View("Index"); } } ``` **其它需要验证的 action 都需要加一个 Authorize 属性,如果用户没权限将转向到登陆页面。** ```plain [Authorize] PublicActionResult Default() { return View(); } [Authorize] publicActionResult About() { return View(); } ``` #### 15.MVC 有多少种不同类型的结果类型? **注意: 很难去记住所有的 12 种类型。但是一些重要的你可以记住,例如: ActionResult , ViewResult ,和 JsonResult 。详情如下:** **MVC 中的 12 种结果类型,最主要的是 ActionResult 类,它是一个基础类,它有 11 个子类型,如下:** **ViewResult - 给响应流渲染指定的视图** **PartialViewResult - 给响应流渲染指定的局部视图** **EmptyResult - 返回空的响应结果。** **RedirectResult - 执行一个 HTTP 转向到指定的 URL。** **RedirectToRouteResult - 执行一个 HTTP 转向到一个 URL,这个 URL 由基于路由数据的路由引擎来决定** **JsonResult - 序列化一个 ViewData 对像到 JSON 格式。** **JavaScriptResult - 返回一段 Javascript 代码,它可以在客户端执行。** **ContentResult - 写内容到响应流,不需要视图支持。** **FileContentResult - 返回一个文件到客户端。** **FileStreamResult - 返回一个文件到客户端,它提供的是流。** **FilePathResult - 返回一个文件到客户端。** #### 16.什么是 WebAPI? **HTTP 是最常用的协议。过去的很多年,浏览器是我们使用 HTTP 方式公开数据的首选客户端。但是日新月异,客户端发展到多种形式。我们需要使用 HTTP 方式传递数据给不同的客户端,例如:移动手机、Javascript,Windows 应用等等。** **WebAPI 是一个通过 HTTP 方式公开数据的技术,它跟随 REST 规则。** #### 17.什么是 MVC 中的打包也压缩? **打包与压缩帮助我们减少一个页面的请求时间,从而提高页面执行性能。** **打包如何搞高性能?** **我们的项目总是需要 CSS 和脚本文件。打包帮助你合并多个 Javascript 和 css 文件到单个文件,从而最小化多个请求到一个请求。** **例如,包含下面的 web 请求到一个页。这个页面要求两个 Javascript 文件, Javascript1.js 和 Javascript2.js 。** #### 18.简述 Func 与 Action 的区别? **Func 是有返回值的委托,Action 是没有返回值的委托。** #### 19.在项目中如何解决高并发问题? **答案:尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能。** **优化数据库查询语句。** **优化数据库结构,多做索引,提高查询效率。** **统计的功能尽量做缓存,或按每天一统计或定时统计相关报表,避免需要时进行统计的功能。** **能使用静态页面的地方尽量使用,减少容器的解析(尽量将动态内容生成静态 html 来显示)。** **解决以上问题后,使用服务器集群来解决单台的瓶颈问题。** #### 19.MVC 中还有哪些注释属性用来验证? **如果你要去检查字符的长度,你可以使用**`<span class="ne-text">StringLength</span>` ```plain [StringLength(160)] public string FirstName { get; set; } ``` **如果你想使用注册表达式,你可以使用 RegularExpression 。** ```plain [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}")]public string Email { get; set; } ``` **如果你想检查数字是否在一个范围内,你可以使用 Range 。** ```plain [Range(10,25)]public int Age { get; set; } ``` **有时你想比较两个字段的值,我们可以使用 Compare。** ```plain public string Password { get; set; } [Compare("Password")] public string ConfirmPass { get; set; } ``` #### 20.ActionResult 和 ViewResult 有什么不同? **ActionResult 是一个抽象类,ViewResult 衍生于 ActionResult 类。 ActionResult 有几种衍生类,例如: ViewResult,JsonResult,FileStreamResult, 等等。** **ActionResult 可以用来开发多态和动态动象。所以如果你动态运行不同类型的视图,ActionResult 是最好的选择。例如下面的代码,你可以看见我们有一个 DynamicView。基于标记(IsHtmlView),它会返回 ViewResult 或 JsonResult。** #### 21.MVC 中如何执行打包? **打开 App\_Start 文件夹中的 BundleConfig.cs** **在 BundleConfig.cs 中,添加你想打包的 JS 文件路径到打包集合。如下所示:** ```plain bundles.Add(new ScriptBundle("~/Scripts/MyScripts").Include( "~/Scripts/*.js")); ``` **下面是 BundleConfig.cs 文件的代码:** ```plain public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle("~/Scripts/MyScripts").Include( "~/Scripts/*.js")); BundleTable.EnableOptimizations = true; } } ``` **一旦你合并了脚本到一个文件,你可以使用下面的代码去调用它:** ```plain <%= Scripts.Render("~/Scripts/MyScripts") %> ``` #### 22.MVC 的路由选择是什么? **路由选择功能帮你定义一个 URL 规则,映射 URL 到控制器。** #### 23.在哪里写路由映射表? **在 “global.asax” 文件。** #### 24.在 MVC 中提到 Area 的好处? **在 MVC 中 Area 的好处如下:** **它允许我们将模型、视图和控制器组织成应用程序的单独功能部分,如管理、计费,客户支持和更多。** **很容易与另一个创建的其他区域集成。** **也很容易进行单元测试。** #### 25.你能解释一下 MVC 中的 RenderBody 和 RenderPage 吗? **RenderBody 就像 web 表单中的 ContentPlaceHolder。这将存在于布局页中,并将呈现子页/视图。布局页将只有一个 RenderBody()方法。RenderPage 也存在于布局页中,多个 RenderPage()可以存在于布局页中。** #### 26. ASP.NET MVC 的过滤器有哪些? **APS.NET MVC 中(以下简称“MVC”)的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理。这时候就用到了过滤器。** **MVC 支持的过滤器类型有四种,分别是:Authorization(授权),Action(行为),Result(结果)和 Exception(异常)。** **Authorization:此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法。** **Exception:用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面抛出的异常。** **Action:用于进入行为之前或之后的处理。** **Result:用于返回结果的之前或之后的处理。**
个人天使
2025年2月12日 17:25
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码