ASP.NET 初学者和专业人士面试题 - 第一部分






2.08/5 (4投票s)
本 ASP.NET 教程是我之前教程“ASP.NET 面试题 Top 10 及答案”的延伸。
本 ASP.NET 教程是我之前教程“ASP.NET 面试题 Top 10 及答案”的延伸。在之前的教程中,重点是向您展示 ASP.NET 开发人员面试中通常会问到的一些最重要的 ASP.NET 面试题。在本文中,我将尝试进一步扩展这些重要问题,并添加更多重要问题。
基本上,面试官通常会这样做。面试官会问一个关于技术概念的较高层级的问题。如果得到正确的答案,他会进一步深入探讨与该特定概念及其实现细节相关的内容。例如,在上一篇文章中,我们询问了 ASP.NET 中 ViewState 的概念,但在本教程中,我们将通过更多问题进一步探讨 ViewState 的概念。但我们不会重复上一篇文章中已有的问题,因此强烈建议您先阅读那篇ASP.NET 面试题教程。
ASP.NET 中的 HttpHandlers 和 HttpModules 是什么?
为了充分理解 HttpHandlers
和 HttpModules
的概念,我写了一篇详细的ASP.NET 教程。在这里,我将这两个概念定义如下:
HttpHandler
:ASP.NET 引擎使用 HttpHandler
根据其扩展名来处理特定请求。ASP.NET 页面处理程序会处理所有针对 (.aspx) 页面的请求。我们可以定义自己的自定义 HttpHandler
来处理特定扩展名(例如 .jpeg、.gif 或 .ahmad)的特定请求。但是,对于特定请求,将始终只有一个处理程序。
HttpModule
:ASP.NET 引擎使用 HttpModule
来为所有传入请求(无论其扩展名如何)注入一些特定的功能,并与 ASP.NET 的默认功能一起工作。ASP.NET HTTP 管道中已有许多内置模块。但我们可以编写自己的自定义 HTTP 模块来为所有传入请求执行一些附加功能(例如,URL 重写或实现某些安全机制)。
什么是状态管理?
HTTP 本质上是无状态协议。因此,我们需要某种机制来在客户端的一个或多个对服务器的后续请求之间保留状态(即网页、控件或对象的状态等)。这种机制就是状态管理。
ASP.NET 中使用的状态管理技术有哪些?
ASP.NET 中使用的状态管理技术可以分为两类:
- 客户端状态管理
- 视图状态
- 控制状态
- 隐藏字段
- Cookie
- 查询字符串
- 服务器端状态管理
- 应用程序状态
- 会话状态
- 配置文件属性
什么是 ViewState?或者将 ViewState 解释为一种状态管理技术?
ViewState
是客户端状态管理技术之一,它提供页面级状态管理,这意味着状态会在对同一页面的后续请求之间得到保留。使用此技术,页面及其控件的状态存储在一个隐藏的表单字段中,即“__VIEWSTATE
”,当页面通过 HTTP 请求回发时,此字段在服务器上再次可用。
通过查看 .ASPX 页面的视图源,您可以找到此隐藏字段,如下所示:
<input type="hidden" name="__VIEWSTATE"
value="wEPDwUKMTM4OTIxNTEzNA9kFgJmD2QWAgIBD2QWAgIDDxYCHgVzdHlsZQV" />
ViewState
数据以 Base64 String
编码格式进行编码。
我们可以启用/禁用 ViewState 吗?
是的,ViewState
可以在不同级别启用或禁用:
- 控件级别
可以通过设置
EnableViewState
属性来启用或禁用特定控件的ViewState
,如下所示:aControl.EnableViewState = false;
- 页面级别
我们可以为整个页面启用/禁用
ViewState
,如下所示:<%@ Page Language="C#" EnableViewState="false" %>
- 应用程序级别
对于整个应用程序,我们可以在配置文件中启用/禁用视图,如下所示:
<pages enableViewState="false"> .... </pages>
ASP.NET 中 Session.Clear() 和 Session.Abandon() 有什么区别?
正如我们所理解的,Session
是一个 Collection
,它以键/值对的形式存储数据。因此,Session.Clear()
会清除所有 session
值,但不会销毁 Session
。然而,Session.Abandon()
会销毁 session
对象。
换句话说,Session.Clear()
就像删除文件夹(例如“Root”)中的所有文件,而 Session.Abandon()
意味着删除“Root”文件夹。
Application 和 Session State 有什么区别?
应用程序状态基本上是应用程序所有用户及其所有会话的通用数据存储库。另一方面,Session
状态特定于单个用户会话。
因此,我们可以将数据存储在应用程序状态对象中,该对象对特定应用程序的所有用户都是通用的,如下所示:
//Set Value
Application["UsersCounter"] = Convert.ToInt32(Application["UsersCounter"]) + 1;
//Retrieve Value
lblUsersCounter.Text = Application["UsersCounter"].ToString();
建议将较小的值存储在应用程序对象中。
Session
对象可以为用户的特定会话存储数据。存储和检索也很简单,就像对应用程序对象一样。
//Set Value
Session["ProductsCount"] = Convert.ToInt32(Session["ProductsCount"]) + 1;
//Retrieve Value
lblProductsCounter.Text = Session["ProductsCount"].ToString();
有关 Global.asax 中 Session
状态模式以及 Session_Start
/Session_End
事件的面试题已在此处解释。
Label 控件和 Literal 控件有什么区别?
ASP.NET 中的 Label
控件在 <span>
标签内呈现文本,而 Literal 控件仅呈现文本而不带任何标签。
使用 Label
控件,我们可以使用其 CssClass
属性轻松应用样式,但是,如果我们不想应用样式/格式,最好使用 Literal 控件。
ASP.NET 中的 Hyperlink 与 LinkButton?
Hyperlink 仅重定向到由“NavigateURL
”属性标识的给定 URL。然而,LinkButton
,它实际上显示一个 Hyperlink
样式的按钮,会导致对同一页面的回发,但它不会重定向到给定的 URL。
与验证控件相关的面试题已在之前的帖子中给出。
希望这一系列的 ASP.NET 面试题和答案以及之前的 Top 10 列表能对 ASP.NET 开发人员有所帮助。在第二部分,我将提供更多相关问题。