`

ASP.NET学习

 
阅读更多

WebForm

前台aspx:控制页面显示格式,后台cs:控制程序逻辑。

aspx文件 :后缀名aspx。一般称为Web窗体或WebForm。相当于模板,页面中有asp标签。asp标签 会asp.net引擎会自动 翻译成HTML。

cs文件 :后缀名aspx.cs。后台逻辑代码。cs可以访问aspx中的控件。aspx中也可以访问cs中定义的字段、函数。

 

aspx页面中可以想JSP那样写C#代码。

例:在页面中用C#写十个“你好”

<%for(int i=0;i<10;i++){ %>

    你好

<%}%>

 

其他写法示例:

<%Response.Write("你好")%>

<%

for(int i=0;i<10;i++){

    Response.Write("你好");

}

%>

<int age=30;>

 

 

不推荐这样写。但是一些简单的代码可以使用这种写法。比如输出值。

例:

在cs中有一个MyName的Page类的非私有的成员变量。显示在ASPX页面中。

<%=MyName%>

<%=GetMyName()%>

说明:= 等号 表示输出表达式的值。相对于调用Response.Write()方法。

 

aspx调用cs成员级别必须是protected或public,不能是private。

 

aspx,cs,dll之间的关系

通过反射可以看到:

1. cs的代码在实际执行的时候生成cs的类的子类。

2. aspx代码 与 cs代码 一起 经编译后生成在cs的类的子类中。 

 

补充:C#中一切可执行的最终都编译成Assembly。

 

 

Page类

1. Request,Response,Server是Page类的属性。是对content.Request,content.Response,content.Server的简化调用。

 

2. AppRelativeVirtualPath属性:获得页面相对于应用跟路径的路径,比如~/Default2.aspx

 

3.FindControl(string ctrlid) 根据控件的Id找到控件。该方法返回控件实例。一般情况下,需要访问控件可以直接使用控件Id。但有些场合,使用ListView等。

 

4. IsPostBack属性

 

5.Session属性

 

6. ResolveClientUrl(url)将虚拟路径转换为客户端访问时的路径。

比如ResolveClientUrl("~a/b.aspx")结果是a/b.aspx,这通常在ListView等控件的模板中输出HTML使用。基本就是对VirtualPathUtility.ToAbslute简化调用。考虑当前页面的相对路径,生成的路径短。该方法比较常用。

 

7.ResolveUrl("~a/b.aspx")的结果就是 /WebSite/a/b.aspx 。不考虑当前页面,就是对VirtualPathUtility.ToAbslute的调用。

 

 

补充:

显示转换类型:使用as运算符。

 

 

服务器控件与HTML控件

1. HTML控件

运行在浏览器端,与服务器无关。

 

2. ASP.NET服务器控件

经过ASP.NET高度封装。

 

3. runat="server"的HTML控件

asp.net页面中,对普通html控件添加runat="server"属性,即可以在服务器端操作html控件。这种html控件运行在服务器端,需要被服务器引擎渲染。

这种控件在服务器端仅可使用比较简单的HTML属性,不如ASP控件编写方便。

应用:如果没有被ASP.NET封装的控件。比如:<td>

 

原生的html<input>等,就是html控件。

asp标签的控件,即服务器控件。

 

website与webapplication

(1)在后台修改代码,webapplication,需要重启浏览器才能生效。website不要重启,直接生效。

(2)webapplication显示namespace,为项目名称,website不显示namespace。

WebSite是为了兼容asp转过来的开发人员的习惯而存在的,使用比较方便。但是不利于工程化开发,比如代码出错不容易发现,代码不分命名空间。

website与webapplication开发技术上没有任何区别,只是开发,调式习惯不同。

如果需要的话,在Visual Studio中可以把WebSite转换为webapplication。

 

asp.net的所有提交都是post,get方式几乎不可用。

Post提交数据时,浏览器中点刷新,会提示“重试”。这是Post的最大缺陷。

 

虚拟路径

1.HTTP的定位:/ 表示网站根目录、../ 表示上级目录、./表示当前目录。

例:网站为localhost中,/a.html 表示localhost/a.html 。

 

2.ASP.NET中~表示从应用程序目录开始定义。特殊路径表示“~”,该符号只能在服务器控件使用。

如果HTML控件或者需要在代码中转换的话就可以使用VirtualPathUtility.ToAbsolute("~/a/b1.aspx")就是虚拟路径转换为相对于应用根路径的全路径,也就是/WebSite/a/b1.aspx

 

VirtualPathUtility主要方法:

string AppendTrailingSlash(string virtualPath) 

    如果路径最后没有"/"则添加;

string Combine(string basePath,string relativePath)

    将两个路径合并。

string GetDirectory(string virtualPath)

    返回虚拟路径的目录部分。

string MakeRelative(string fromPath,string toPath)

    计算两个虚拟路径的相对路径。

string ToAbsolute(string path)

    转换为绝对路径。

 

IsPostBack属性

页面中

Page_Load(){

if(!IsPostBack)  //表示第一次加载页面。

{

}

}

IsPostBack表示是不是提交返回给服务器的数据处理。

所以如果!IsPostBack==true,则表示该过程是第一次加载页面,没有提交回服务器。

 

 

 

ViewState

ViewState存储非表单域,非value值的容器。所有webform都有viewstate。

注意:有些控件,是没有value概念的。则这些值无法提交给服务器,所以就放在viewstate中。而有value概念的控件,由于自身可以提交到服务器,所以不用放进viewstate,也能提交。

 

开发web页面,必须部分禁止viewstate。完成web页面之后,查看页面源码,如果viewstate的值很多,则必须要部分禁用viewstate。

 

禁用方法:

1.每个控件都有EnableViewState,设置false,则控件的viewstate就被禁用了。

2.禁用整个页面的ViewState的方法,

   在asp最上面配置区<%@ Page Language="C#" AutoEventWiroup="true" VodeFile="XXX.aspx.cs" Inherits="XXX"%>

 中放入EnableViewState="false"。

 

HTTP是无状态协议。ViewState可以使web应用变为有状态信息的。

 

ViewState的缺点

状态信息保存在隐藏字段中的缺点;加大网站的流量、降低访问速度,机密数据放到表达中会有数据前排等安全性问题。

 

注意:

禁用了ViewState就无法得到上次给客户端的值了。即禁用了ViewState之后,对写页面中的值无影响,但对读取会有影响。

 

 

ASP.NET中的超链接提交请求与表单提交请求

1. 通过表单提交数据至服务区,页面会将ViewState提交。有回发状态,IsPostBack=true。

2. 通过超链接提交,也就是通过Get方式提交。页面不会发送ViewState。也就是每一次超链接请求的IsPostBack=false,即每次超链接请求都是第一次请求。

注意:LinkedButton虽然看起来像超链接,但实际也是要提交表单的。

 

 

数据绑定控件

数据绑定分为数据源和数据绑定控件。

数据绑定控件通过数据源来获得数据,通过数据源来隔离数据提者和数据使用者。

数据绑定控件通过数据源来对数据进行修改。

 

数据源有SqlDataSource,AccessDataSource,ObjectDataSource,LinqDataSource,EnityDataSource,XmlDataSource等(SiteMapDataSource是SiteMap专用数据源),由于大部分项目都不会页面直接连数据库,所以SqlDataSource,AccessDataSource不会使用,LinqDataSource,EnityDataSource只有在很极端的采用Linq、Enity Framework的项目中才会用。

XmlDataSource是处理XML数据时才可能会用。

ObjectDataSource是web开发中应用最广的数据源。

 

数据绑定控件有列表数据绑定控件:DropDownList、RadioButtonList、ListBox、CheckBoxList、BulletedList等。和复杂控件:DataGrid、GridView、DetailsView、FormView、ListView,Repeater、DataList等。

 

复杂控件中DataGrid已经不推荐使用。Repeater是最轻量级的组件,在互联网的前台用的最多。ListView是ASP.NET 3.5新增的控件,ListView是GridView,FormView,Repeater。DataList等控件的统一。这些控件的优点ListView都有。

 

 

ObjectDataSource用来将一个类(大部分情况类是使用DataSet)作为数据源,TypeName属性是数据源类的全名,有DeleteMethod,InsertMethod,SelectMethod,UpdateMethod等几个属性,分别为类中删,插,更新的方法名,这些方法可能有参数,参数的值通过DeleteParameters,UpdateParameters,InsertParameters等嵌套节点设置。

 

 

数据绑定控件可以使用Visual studio配置使得控件绑定到ObjectDataSource等。也可以使用手工方式绑定。

 

例:

BulletedList.DataSource=new int[]{1,2,3,4};//一般实现IEnumerable接口的数据都可以设置。

BulletedList.DataBind();//表示刷新数据显示。该句不能少。

 

数据绑定控件的AppendDataBoundItems属性,表示将数据绑定项追加到静态声明列表项上。

 

Reapter

轻量级,Repeat通常用于数据展示。不适合操组数据。

 

生产导向。

 

 

ListView

重量级,ListView方便操作数据,

 

 

 

 

 

错误页

配置错误页

配置web.config,配置customErrors区域。

    <customErrors mode="RemoteOnly" redirectMode="ResponseRewrite" defaultRedirect="MyErrorPage.aspx">

        <error statusCode="403" redirect="~/NoAccess.htm" />

        <error statusCode="404" redirect="~/FileNotFound.htm">

    </customErrors >

 

 

defaultRedirect表示,发生错误需要被现实的页面。

<error statusCode>是指定特殊的错误处理页面。

~/NoAccess.htm 表示虚拟路径。

 

mode有三个可选值(注意大小写):

 

On:

总是显示错误页面。
Off: 不使用错误页面。即不做任何异常处理。
RemoteOnly: 本机的访问显示调用堆栈等异常信息,对外部用户的现实定制错误页面。

说明:

1.一般设置mode="RemoteOnly",网站服务器的管理者可以在服务器的浏览器中看到详细错误信息,网站外部用户会显示异常处理页面。

2.演示异常处理页时,使用mode="On"。

 

redirectMode表示发生错误之后,页面跳转的方式。一般redirectMode有两种值"ResponseRewrite"和"ResponseRedirect"。默认为" ResponseRedirect "。

 

在错误处理时,如果要在错误页面中取得异常对象,必须设置redirectMode=" ResponseRewrite "。

因为如果是"ResponseRedirect",则表示客户端重定向,即客户端重新发送一次新HTTP请求给异常处理页面。由于是新的请求,异常处理页面无法取得之前一次请求的异常对象。

而"ResponseRewrite"表示直接从服务器输出页面给服务器,相对于在服务器内部做了页面跳转。没有新的请求,获得本次异常对象。所以必须采用这种方式。

 

 

使用asp页面

在asp页面中,可以处理异常信息,比如将异常写入日志中。

在asp中处理异常信息方式:

Page_Load(){

if(!IsPostBack)  //表示第一次加载页面。

{

    Exception ex=HttpContext.Current.Server.GetLastError(); //获得异常对象。

    //日志记录 ex.Message 和 ex.StackTrace 

}

}

 

注意,错误处理页面如果发生错误的话,就不能处理之前异常了。

 

在异常处理页面中判断Request.UserHostAddress来者之某些Ip可以看到异常,也可以读取Session,让网站后台管理员可以看到异常。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics