Asp.net mvc 知多少(四)
2017-01-31 21:30
555 查看
本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可访问[http://www.dotnettricks.com/free-ebooks](http://www.dotnettricks.com/free-ebooks)自行下载。该书主要分为两部分,ASP.NET MVC 5、ASP.NET WEB API2。本书最大的特点是以面试问答的形式进行展开。通读此书,会帮助你对ASP.NET
MVC有更深层次的理解。*由于个人技术水平和英文水平也是有限的,因此错误在所难免,希望大家多多留言指正。***系列导航**[Asp.net mvc 知多少(一)](http://www.jianshu.com/p/5f6156cacc76)[Asp.net mvc 知多少(二)](http://www.jianshu.com/p/f9a5cd06bb77)[Asp.net mvc 知多少(三)](http://www.jianshu.com/p/4d6285ad825a)[Asp.net mvc 知多少(四)](http://www.jianshu.com/p/fe8dee26059d)
本节主要讲解布局页(Layout)的使用
Q40. 什么是 ASP.NET MVC的布局页(Layouts)?
Ans. Layouts(布局页)是用来使asp.net mvc中的views保持一致的外观体验。与webforms的master pages功能相似,但比其更加简单且可扩展性更强。下面是一个布局页的代码展示:
可以使用layout为你的网站定义一个通用的模板。layout可以直接在view的顶部直接声明:
Q41. 介绍下ASP.NET MVC中Sections(节)?
Ans. 通过section可以在layout中指定占用一块内容区域。可以在view中按以下方式定义section。
在layout中通过@RenderSection("header")去渲染上面定义的section。
默认来说,如果在layout中定义了需要渲染的section,那么在view中就必须实现。但可以通过以下方式,限定section是可选的。
备注:View只能定义已经在layout中指定渲染的section,否则会抛出异常。
Q42. RenderBody 和 RenderPage 的作用是?
Ans. RenderBody 方法是在layout页面中调用的,是用来渲染呈现子页面/视图。它类似于webform引擎中master页中的ContentPlaceHolder。一个layout页面中只能有一个 RenderBody 方法。
RenderPage 方法也是在layout页面中用来渲染加应用程序中的其他页面。一个layout页面中可以有多个RenderPage 方法。
Q43. Styles.Render 和Scripts.Render的功能是?
Ans. 它们是用来捆绑多个css文件和js文件,以提高网络加载速度和页面解析速度。Style.Render是用来呈现定义在BundleConfig.cs中捆绑的css文件。 Styles.Render为捆绑的css创建style标签。
Scripts.Render 也是用来呈现捆绑的script文件。它会为捆绑的script文件创建script标签。
当关闭优化时Styles.Render和Scripts.Render会为CSS bundle(script bundle)中的定义的每一个css(script)生成一个style(script)标签。当开启优化时, Styles.Render 和Scripts.Render生成唯一的style和script标签,其中带有版本戳的URL代表整个捆绑的css和script。
Q44. ASP.NET MVC中如何启用捆绑优化?
Ans.
使用BundleTable捆绑多个css文件和js文件,以提高网络加载速度和页面解析速度。
通过在Global.asax.cs文件中修改BundleTable的EnableOptimizations属性来打开和关闭捆绑优化。
Q45. 什么是ViewStart?
Ans. _ViewStart.cshml 页面是服务于具有相同布局的view(s) 。该文件代码优于同一目录下的其他view代码先执行。该文件也将递归应用于子文件夹下的view(s)。 默认,
ASP.NET MVC 项目在Views文件夹下仅有一个 _ViewStart.cshtml 文件。该文件中为你mvc 应用程序指定了默认的layout。
因为上面这段代码会在任何view之前运行,所以可以通过override Layout 属性为view指定一个不同的layout。
Q46. 什么时候去使用 _ViewStart?
Ans. 当有一系列的view具有相同的设置, 就可以使用 _ViewStart.cshtml 来放置通用的视图设置。 如果有任何视图需要修改通用的设置可以通过在view中重载通用设置指定一个新值即可。
Q47. ASP.NET MVC中有哪几种方式去修改默认的layout?
1.修改根目录下的Views文件夹的 _ViewStart文件。_ViewStart为web application定义了默认layout页面。可以通过代码根据不同的Controller加载不同的layout。
2.在Views文件夹的某一个View目录下新增 _ViewStart 文件。
3.在View页面的顶部修改Layout
4.在ActionResult中指定Layout
Q48. 介绍下ASP.NET MVC项目中的App_Start文件夹?
Ans. App_Start文件夹是从MVC4引入的,包含以下配置文件,比如
BundleConfig.cs, FilterConfig.cs,RouteConfig.cs,WebApiConfig.cs 。所有的设置都是在Global.asax.cs文件的Application_Start方法中被注册。
BundleConfig.cs - 用来为css和js文件创建和注册捆绑。默认已经包含了对jQuery, jQueryUI, jQuery validation, Modernizr, Site CSS的捆绑。
FIlterConfig.cs - 用来注册全局的MVC过滤器,比如error filters, actions filters 等。默认包含 HandleErrorAttribute 过滤器。
RouteConfig.cs - 用来注册不同的路由模式,默认仅注册一个名为Default的路由。
WebApiConfig.cs - 用来注册不同的WEB API 路由,也可用来设置额外的WEB API 配置选项。
Q49. ASP.NET MVC中返回/呈现一个View都有哪几种方式?
Ans. 主要有以下四种方式:
Return View() - 直接告诉MVC去生成指定的将要展示的视图的HTML并发送到浏览器。这个相当于ASP.NET WebForm中的 Server.Transfer() 。
Return RedirectToAction() - 这是告诉MVC去跳转到指定的action而不是直接提供HTML。这种方式下,浏览器将受到跳转通知并重新发送一个指定action的新请求。这个类似与ASP.NET WebForm中的Response.Redirect() 。
而且, RedirectToAction 会根据路由表构造了一个跳转URL到指定的action/controller。RedirectToAction 会使浏览器收到302重定向状态码。
Return Redirect() - - 这是告诉MVC去跳转到指定的URL而不是直接提供HTML。这种情况下,浏览器收到重定向的通知并重新发送一个指定URL的新请求。类似与ASP.NET WebForm中的Response.Redirect() 。你需要自己构造完整的URL去进行重定向。浏览器同样会收到302重定向状态码。
Return RedirectToRoute() - 这是告诉MVC去路由表中查找指定的路由,然后重定向到路由中定义的controller/action。同样,这也要发起一个新的请求。
备注:
Return View 不会发起一个新的请求。它只是进行视图渲染而不会更改浏览器地址栏的URL。
Return RedirectToAction 发起了一个新的请求,而且浏览器地址栏的URL将被MVC生成的URL更新。
Return Redirect 同样是发起了一个新的请求,且浏览器地址栏的URL将被更新。但是你需要自己指定完整的URL进行重定向。
在 RedirectToAction 和 Redirect之间,最佳实践是在应用程序中的actions/controllers中进行跳转时使用 RedirectToAction。因为如果使用Redirect,一旦你更改了路由表,你就需要手动去更改那些你自己构造的URLs。
RedirectToRoute 重定向到路由表中定义的指定路由。
MVC有更深层次的理解。*由于个人技术水平和英文水平也是有限的,因此错误在所难免,希望大家多多留言指正。***系列导航**[Asp.net mvc 知多少(一)](http://www.jianshu.com/p/5f6156cacc76)[Asp.net mvc 知多少(二)](http://www.jianshu.com/p/f9a5cd06bb77)[Asp.net mvc 知多少(三)](http://www.jianshu.com/p/4d6285ad825a)[Asp.net mvc 知多少(四)](http://www.jianshu.com/p/fe8dee26059d)
本节主要讲解布局页(Layout)的使用
Q40. 什么是 ASP.NET MVC的布局页(Layouts)?
Ans. Layouts(布局页)是用来使asp.net mvc中的views保持一致的外观体验。与webforms的master pages功能相似,但比其更加简单且可扩展性更强。下面是一个布局页的代码展示:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>@ViewBag.Title</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") </head> <body> @RenderBody() @Scripts.Render("~/bundles/jquery") @RenderSection("scripts", required: false) </body> </html>
可以使用layout为你的网站定义一个通用的模板。layout可以直接在view的顶部直接声明:
@{ Layout = "~/Views/Shared/SiteLayout.cshtml"; }
Q41. 介绍下ASP.NET MVC中Sections(节)?
Ans. 通过section可以在layout中指定占用一块内容区域。可以在view中按以下方式定义section。
@section header{ <h1>Header Content</h1> }
在layout中通过@RenderSection("header")去渲染上面定义的section。
默认来说,如果在layout中定义了需要渲染的section,那么在view中就必须实现。但可以通过以下方式,限定section是可选的。
@RenderSection("header",false)
备注:View只能定义已经在layout中指定渲染的section,否则会抛出异常。
Q42. RenderBody 和 RenderPage 的作用是?
Ans. RenderBody 方法是在layout页面中调用的,是用来渲染呈现子页面/视图。它类似于webform引擎中master页中的ContentPlaceHolder。一个layout页面中只能有一个 RenderBody 方法。
<body> @RenderBody() @RenderPage("~/Views/Shared/_Header.cshtml") @RenderPage("~/Views/Shared/_Footer.cshtml") @RenderSection("scripts",false) @section scripts{ <script src="~/Scripts/jquery-1.7.1.min.js"></script> } </body>
RenderPage 方法也是在layout页面中用来渲染加应用程序中的其他页面。一个layout页面中可以有多个RenderPage 方法。
@RenderPage("~/Views/Shared/_Header.cshtml");
Q43. Styles.Render 和Scripts.Render的功能是?
Ans. 它们是用来捆绑多个css文件和js文件,以提高网络加载速度和页面解析速度。Style.Render是用来呈现定义在BundleConfig.cs中捆绑的css文件。 Styles.Render为捆绑的css创建style标签。
Scripts.Render 也是用来呈现捆绑的script文件。它会为捆绑的script文件创建script标签。
public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include( "~/Scripts/jquery.unobtrusive*", "~/Scripts/jquery.validate*")); bundles.Add(new StyleBundle("~/Content/themes/base/css").Include( "~/Content/themes/base/jquery.ui.core.css", "~/Content/themes/base/jquery.ui.resizable.css", "~/Content/themes/base/jquery.ui.selectable.css", "~/Content/themes/base/jquery.ui.button.css", "~/Content/themes/base/jquery.ui.dialog.css", "~/Content/themes/base/jquery.ui.theme.css")); }
当关闭优化时Styles.Render和Scripts.Render会为CSS bundle(script bundle)中的定义的每一个css(script)生成一个style(script)标签。当开启优化时, Styles.Render 和Scripts.Render生成唯一的style和script标签,其中带有版本戳的URL代表整个捆绑的css和script。
Q44. ASP.NET MVC中如何启用捆绑优化?
Ans.
使用BundleTable捆绑多个css文件和js文件,以提高网络加载速度和页面解析速度。
通过在Global.asax.cs文件中修改BundleTable的EnableOptimizations属性来打开和关闭捆绑优化。
protected void Application_Start() { //other code has been removed for clarity //disable optimization System.Web.Optimization.BundleTable.EnableOptimizations = false; }
Q45. 什么是ViewStart?
Ans. _ViewStart.cshml 页面是服务于具有相同布局的view(s) 。该文件代码优于同一目录下的其他view代码先执行。该文件也将递归应用于子文件夹下的view(s)。 默认,
ASP.NET MVC 项目在Views文件夹下仅有一个 _ViewStart.cshtml 文件。该文件中为你mvc 应用程序指定了默认的layout。
@{ Layout = "~/Views/Shared/Layout.cshtml"; }
因为上面这段代码会在任何view之前运行,所以可以通过override Layout 属性为view指定一个不同的layout。
Q46. 什么时候去使用 _ViewStart?
Ans. 当有一系列的view具有相同的设置, 就可以使用 _ViewStart.cshtml 来放置通用的视图设置。 如果有任何视图需要修改通用的设置可以通过在view中重载通用设置指定一个新值即可。
Q47. ASP.NET MVC中有哪几种方式去修改默认的layout?
1.修改根目录下的Views文件夹的 _ViewStart文件。_ViewStart为web application定义了默认layout页面。可以通过代码根据不同的Controller加载不同的layout。
@{ var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToSt ring(); string layout = ""; if (controller == "Admin") { layout = "~/Views/Shared/_AdminLayout.cshtml"; } else { layout = "~/Views/Shared/_Layout.cshtml"; } Layout = layout; }
2.在Views文件夹的某一个View目录下新增 _ViewStart 文件。
3.在View页面的顶部修改Layout
@{ Layout = "~/Views/Shared/_AdminLayout.cshtml"; }
4.在ActionResult中指定Layout
public ActionResult Index() { RegisterModel model = new RegisterModel(); //TO DO: return View("Index", "_AdminLayout", model); }
Q48. 介绍下ASP.NET MVC项目中的App_Start文件夹?
Ans. App_Start文件夹是从MVC4引入的,包含以下配置文件,比如
BundleConfig.cs, FilterConfig.cs,RouteConfig.cs,WebApiConfig.cs 。所有的设置都是在Global.asax.cs文件的Application_Start方法中被注册。
BundleConfig.cs - 用来为css和js文件创建和注册捆绑。默认已经包含了对jQuery, jQueryUI, jQuery validation, Modernizr, Site CSS的捆绑。
FIlterConfig.cs - 用来注册全局的MVC过滤器,比如error filters, actions filters 等。默认包含 HandleErrorAttribute 过滤器。
RouteConfig.cs - 用来注册不同的路由模式,默认仅注册一个名为Default的路由。
WebApiConfig.cs - 用来注册不同的WEB API 路由,也可用来设置额外的WEB API 配置选项。
Q49. ASP.NET MVC中返回/呈现一个View都有哪几种方式?
Ans. 主要有以下四种方式:
Return View() - 直接告诉MVC去生成指定的将要展示的视图的HTML并发送到浏览器。这个相当于ASP.NET WebForm中的 Server.Transfer() 。
Return RedirectToAction() - 这是告诉MVC去跳转到指定的action而不是直接提供HTML。这种方式下,浏览器将受到跳转通知并重新发送一个指定action的新请求。这个类似与ASP.NET WebForm中的Response.Redirect() 。
而且, RedirectToAction 会根据路由表构造了一个跳转URL到指定的action/controller。RedirectToAction 会使浏览器收到302重定向状态码。
Return Redirect() - - 这是告诉MVC去跳转到指定的URL而不是直接提供HTML。这种情况下,浏览器收到重定向的通知并重新发送一个指定URL的新请求。类似与ASP.NET WebForm中的Response.Redirect() 。你需要自己构造完整的URL去进行重定向。浏览器同样会收到302重定向状态码。
Return RedirectToRoute() - 这是告诉MVC去路由表中查找指定的路由,然后重定向到路由中定义的controller/action。同样,这也要发起一个新的请求。
备注:
Return View 不会发起一个新的请求。它只是进行视图渲染而不会更改浏览器地址栏的URL。
Return RedirectToAction 发起了一个新的请求,而且浏览器地址栏的URL将被MVC生成的URL更新。
Return Redirect 同样是发起了一个新的请求,且浏览器地址栏的URL将被更新。但是你需要自己指定完整的URL进行重定向。
在 RedirectToAction 和 Redirect之间,最佳实践是在应用程序中的actions/controllers中进行跳转时使用 RedirectToAction。因为如果使用Redirect,一旦你更改了路由表,你就需要手动去更改那些你自己构造的URLs。
RedirectToRoute 重定向到路由表中定义的指定路由。
相关文章推荐
- Asp.net mvc 知多少(六)
- Asp.net mvc 知多少(一)
- Asp.net mvc 知多少(一)
- Asp.net mvc 知多少(十)
- Asp.net mvc 知多少(四)
- Asp.net mvc 知多少(九)
- Asp.net mvc 知多少(二)
- Asp.net mvc 知多少(三)
- Asp.net mvc 知多少(六)
- Asp.net mvc 知多少(十)
- Asp.net mvc 知多少(六)
- Asp.net mvc 知多少(四)
- Asp.net mvc 知多少(七)
- ASP.NET Core MVC之Serilog日志处理,你了解多少?
- Asp.net mvc 知多少(五)
- Asp.net mvc 知多少(四)
- Asp.net mvc 知多少(八)
- Asp.net mvc 知多少(六)
- Asp.net mvc 知多少(五)
- Asp.net mvc 知多少(二)