PS:在小编的城市,基于.NET工作的ERP、BPMS系统的居多,其他BS结构系统基本上也是以Vue+.NET为主,单存以MVC开发的Offer较少【仅居于小编在Boss直聘上看到的数据分析】,因此,此章节可列为酌情学习提高篇!
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?
这个引擎提供了数据绑定的显示模板。
@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⻚⾯的⼀部分。
@rendersection("testsection")
在⼦⻚⾯中我们定义如下的sections。
@section testsection {
<h1>test content</h1>
}
如果这个section没有定义的话会出错,我们可以使⽤⼀个required属性来防⽌⻚⾯出错。
@rendersection("testsection", required: false)
8.为什么要使⽤html.partial?
这个⽅法⽤来显示html string指定的某块视图。
html.partial("testpartialview")
9.什么是partial view?
Partial view相当于传统⽹⻚表格中的user controls.
它的主要⽬的是为了重复使⽤这些视图,他们⼀般被放在⼀个共享⽂件夹⾥⾯
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去显示时间:
<%=DateTime.Now%>
在Razor中,只需要⼀⾏: @DateTime.Now
13.在MVC中如何去执⾏Windows认证?
你需要修改web.config⽂件,并设置验证模式为Windows。
<authentication mode="Windows"/>
<authorization>
<deny users="?"/>
</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").Includ
e(
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:⽤于返回结果的之前或之后的处理。