.NET/C#⾯试题汇总系列:ASP.NET MVC【酌情学习提高篇】

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的⼀个扩展。扩展以后可以创建动态的属性。这样的好处有:

  1. 不需要进⾏类型的转换。
  2. 我们可以使⽤dynamic关键字。
  3. 但是有⼀个缺点就是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:⽤于返回结果的之前或之后的处理。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BUG呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值