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?

这个引擎提供了数据绑定的显示模板。

  1. @model MvcStore.Models.Customer
  2. @{ViewBag.Title="Get Customers";}
  3. <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页面的一部分。

  1. @rendersection("testsection")

在子页面中我们定义如下的sections。

  1. @section testsection {
  2. <h1>test content</h1>
  3. }

如果这个section没有定义的话会出错,我们可以使用一个required属性来防止页面出错。

  1. @rendersection("testsection", required: false)

8.为什么要使用html.partial?

这个方法用来显示html string指定的某块视图。

  1. html.partial("testpartialview")

9.什么是partial view?

Partial view相当于传统网页表格中的user controls.

它的主要目的是为了重复使用这些视图,他们一般被放在一个共享文件夹里面。

  1. html.partial()
  2. 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去显示时间:

  1. <%=DateTime.Now%>

在Razor中,只需要一行:

  1. @DateTime.Now

13.在MVC中如何去执行Windows认证?

你需要修改web.config文件,并设置验证模式为Windows。

  1. <authentication mode="Windows"/>
  2. <authorization>
  3. <deny users="?"/>
  4. </authorization>

然后在controlle或action中,你可以使用 Authorize 属性,指定哪个用户可以访问这个controller或action。下面的代码设置到只有指定的用户可以访问它。

  1. [Authorize(Users= @"WIN-3LI600MWLQN\Administrator")]
  2. public class StartController : Controller
  3. {
  4. //
  5. // GET: /Start/
  6. [Authorize(Users = @"WIN-3LI600MWLQN\Administrator")]
  7. public ActionResult Index()
  8. {
  9. return View("MyView");
  10. }
  11. }

14.在MVC中如何用表单认证?

表单认证和ASP.NET的表单验证一样。第一步是设置认证模式为Forms。loginUrl是指向到controller,而不是一个页面。

  1. <authentication mode="Forms">
  2. <forms loginUrl="~/Home/Login" timeout="2880"/>
  3. </authentication>

我们也需要创建一个controller,去验证用户。如果验证通过,需要设置cookies值。

  1. public ActionResult Login()
  2. {
  3. if ((Request.Form["txtUserName"] == "Shiv") &&
  4. (Request.Form["txtPassword"] == "Shiv@123"))
  5. {
  6. FormsAuthentication.SetAuthCookie("Shiv",true);
  7. return View("About");
  8. }
  9. else
  10. {
  11. return View("Index");
  12. }
  13. }

其它需要验证的action都需要加一个 Authorize 属性,如果用户没权限将转向到登陆页面。

  1. [Authorize]
  2. PublicActionResult Default()
  3. {
  4. return View();
  5. }
  6. [Authorize]
  7. publicActionResult About()
  8. {
  9. return View();
  10. }

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中还有哪些注释属性用来验证?

如果你要去检查字符的长度,你可以使用StringLength

  1. [StringLength(160)]
  2. public string FirstName { get; set; }

如果你想使用注册表达式,你可以使用 RegularExpression 。

  1. [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}")]public string Email { get; set; }

如果你想检查数字是否在一个范围内,你可以使用 Range 。

  1. [Range(10,25)]public int Age { get; set; }

有时你想比较两个字段的值,我们可以使用 Compare。

  1. public string Password { get; set; }
  2. [Compare("Password")]
  3. 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文件路径到打包集合。如下所示:

  1. bundles.Add(new ScriptBundle("~/Scripts/MyScripts").Include(
  2. "~/Scripts/*.js"));

下面是 BundleConfig.cs 文件的代码:

  1. public class BundleConfig
  2. {
  3. public static void RegisterBundles(BundleCollection bundles)
  4. {
  5. bundles.Add(new ScriptBundle("~/Scripts/MyScripts").Include(
  6. "~/Scripts/*.js"));
  7. BundleTable.EnableOptimizations = true;
  8. }
  9. }

一旦你合并了脚本到一个文件,你可以使用下面的代码去调用它:

  1. <%= 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:用于返回结果的之前或之后的处理。