学习ASP.NET过程中的困惑,疑问及回答。2月9日部分问题汇总。

1.aspnet_isapi.dll调用CLR 是如何进行的?

在.NET最新版本文件夹中有一个组件去读取应用程序的.NET版本,然后把对应的某个CLR版本加载到进程中。总之,CLR是寄宿在进程内的。只有当终止进程的时候才能卸载CLR

 

2.为什么说ashx比aspx高效?

 因为aspx是web窗体,需要加载服务器控件,相比ashx,aspx耗时在页面生命周期,有19个事件23步,性能损失带来开发便捷。

 

3.processrequest方法是如何被调用的?  

page类下面 有一个 httpapplication对象,该对象通过工程模式得到,

这个对象可调用httpapplication类里的方法,又因为在page类里面,所以page类里的各种方法可以调用,包括了processrequest方法。因为page和httpapplication类都实现了ihttphandle接口(注意在httpapplication类中processrequest的实现形式是显性地使用了ihttphandler接口回调),通过接口调用httpapplication对象可以调用page类中的processrequest方法。

 

4.什么是句柄?

a.句柄是找到一块内存的索引,句柄是一个(通常为32位的)整数,它代表一个对象。作用:找到内存后通过调用Windows函数来修改数据
b.
跟指针的区别是,我们通过指针可以直接修改里面的数据,不需要通过Windows函数来修改
c.
微软这样做的原因是:封装重要的数据,不让我们自己直接修改,怕我们修改坏了。要修改通过委托Windows来修改。

 

5.aspx的页面生命周期的起点是哪里?

  当httpapplication调用proceerequest(context)方法时标识着页面生命开始。方法完毕,便结束生命周期。

 

6. .asax是什么文件?

全局配置文件.当一个应用程序启动时,首先就先执行这个。可选的文件,

在这里主要是配置一些http事件,或者user等等, 可以设置站点启动和关闭的设置
如application_start
session_start等。这里的东西,会用到所有的页面上。当这个应用程序关了后,或者停了,他会自动关闭。

 

7.aspx页面上的for循环是怎么执行成html代码的?

  反编译aspx编译好的类,在renderform方法中可以看到,是执行碰到c#代码块后,执行完c#代码块,再以流的形式输出成html。

 

8. viewstate相比session有什么不同?

(1) session值是保存在服务器内存上,那么,可以肯定,大量的使用session将导致服务器负担加重. 而viewstate由于只是将数据存入到页面隐藏控件里,不再占用服务器资源,因此, 我们可以将一些需要服务器"记住"的变量和对象保存到viewstate里面. 而sesson则只应该应用在需要跨页面且与每个访问用户相关的变量和对象存储上.

(2) session在默认情况下20分钟就过期,而viewstate则永远不会过期.

但viewstate并不是能存储所有的.net类型数据,它仅仅支持String、Integer、Boolean、Array、ArrayList、Hashtable 以及自定义的一些类型.

ViewState的优点:存放在客户端会减轻服务器的负担。

建议不要存放比较机密的信息,因为ViewState要保存在客户端,天生就有安全性的隐患。

 

9.aspx页面生命周期期间的事件可否被重写?

  可以,如果创建了 Global.asax 文件,ASP.NET 会将其编译为从 HttpApplication 类派生的类,然后使用该派生类表示应用程序,只需要在Global.asax 文件中即可重写父类的方法。

 

10. 所有的服务器控件的文本都会记录到viewstate吗?

    服务器控件都会默认保存VIEWSTATE的 有个属性(EnableViewState)可以设置的, 设置为Flase就不保存了,普通控件设置了EnableViewState=ture 不会有效果。

 

11. 浏览器加载的是aspx页面,aspx.cs的变量是怎样被aspx访问的?

    Aspx.cs是aspx的父类,aspx编译后通过继承取到父类的资源。

 

12.  asp.net 的两个常见生命周期,页面生命周期和应用生命周期。

     前者的生命周期伴随着 processrequest方法 开始结束。

     后者的生命周期伴随着 httpapplication对象 开始结束。

 

13.ispostback的意义有什么?

    作用:避免每次点击都重新加载一次。一些表单数据只需要发送一次给客户,比如网页右上角的当前网站登陆人数,ispostback可以判断表单是否是回发(不是第一次请求),第二次回发将不触发对应部分的代码,是否是回发与get请求还是post请求无关。但是一般情况下回发都是post,这是因为server控件默认post提交。get请求一般发生是加载请求网站时。

 

14.具体ispostback需要怎么使用?

    表单有2种,服务器端表单和客户端表单,使用runat属性区分。只有使用服务器端表单才会启用ispostback功能,该功能是使用ViewState实现的,提交表单时ViewState也跟着提交,故服务器可以判断是否是回发。注意,自己写代码不使用服务器控件,也可以实现ispostback功能。

 

15.ViewState与ispostback有什么联系?ViewState存在的意义是什么?

    在ASP.NET中有两个viewstate.一个是控件本身的,用来维护控件自己的一些状态(其中一个功能是为ispostback服务),这个 viewstate是不能被用户访问的;而另外一个ViewState,是用户使用的,这个viewstate和Session几乎一模一样,必须要先对其进行定义,才能使用。viewstate记录了服务器端控件的信息,注意不是所有网页的元素都会记录,也不是所有的服务器端控件都会记录,asp.net会根据需求选择记录某些控件的viewstate信息。

http://developer.51cto.com/art/200907/140092.htm

 

16.面试题:有一个asp.net的网页,上面有服务器控件文本框,文本框绑定了一个事件,这个事件由文本内容发生改变时触发,简单描述这个功能是如何实现的?

   使用了页面保持技术,通过ViewState实现。

   因为使用了服务器控件,所以这个页面有隐藏域,隐藏域中记录有服务器上一次传过来的文本框内容,当提交表单时,服务器可以拿到2个值,一个是隐藏域的值,一个是用户文本框输入的值,两个值比对可以找到文本框是否发生改变。进而决定是否触发事件。

 

17.需要注释掉aspx页面部分代码时,使用<!-- -->和<%-- --%> 有什么区别?

   前者是网页注释,浏览器可以查看到,后者是服务器端注释,不会发往浏览器。故后者更安全且节省网络流量。

   

18.ASPX页面顶部的AutoEventWireup有什么用?

页面加载的时候为什么会执行Page_Load()这个方法?Asp.NET中可以修改AutoEventWireup="true",使页面与某些特殊的事件方法绑定,自动识别这些具有特定名称的事件,而不需要进行委托。微软通过AutoEventWireup属性已经帮我们进行了事件与页面的隐式关联。这些特定名称包括:Page_Init,Page_Load, Page_DataBind, Page_PreRenderPage_Unload等。当该属性为falsePage_Load事件不会得到执行

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值