ASP.NET经典文章

作者在 2008-10-17 22:17:18 发布以下内容
ASP.NET跨页面传值技巧总结
  
1.使用QueryString变量
    QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。下面是一个例子:
a.aspxC#代码

private void Button1_Click(object sender, System.EventArgs e)

{

string s_url;

s_url = "b.aspx?FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: ' '">b.aspxC#代码
private void Page_Load(object sender, EventArgs e)

{

Label2.Text = Request.QueryString["name"];

}

2.使用Application 对象变量
Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。
a.aspxC#代码
private void Button1_Click(object sender, System.EventArgs e)

{

Application["name"] = Label1.Text;

Server.Transfer("b.aspx");

}

b.aspxC#代码
private void Page_Load(object sender, EventArgs e)

{

string name;

Application.Lock();

name = Application["name"].ToString();

Application.UnLock();

}

3.使用Session变量
想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。
a.aspxC#代码
private void Button1_Click(object sender, System.EventArgs e)

{

Session["name"] = Label.Text;

}

b.aspxC#代码
private void Page_Load(object sender, EventArgs e)

{

string name;

name = Session["name"].ToString();

}

4.使用Cookie对象变量
这个也是大家常使用的方法,与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。
a.aspxC#代码
private void Button1_Click(object sender, System.EventArgs e)

{

HttpCookie cookie_name = new HttpCookie("name");

cookie_name.Value = Label1.Text;

Reponse.AppendCookie(cookie_name);

Server.Transfer("b.aspx");

}

b.aspxC#代码
private void Page_Load(object sender, EventArgs e)

{

string name;

name = Request.Cookie["name"].Value.ToString();

}

5.使用Server.Transfer方法
这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。
a.aspxC#代码
public string Name

{

get{ return Label1.Text;}

}

private void Button1_Click(object sender, System.EventArgs e)

{

Server.Transfer("b.aspx");

}

b.aspxC#代码
private void Page_Load(object sender, EventArgs e)

{

a newWeb;   //实例a窗体

newWeb = (source)Context.Handler;

string name;

name = newWeb.Name;

}

倒计时js代码
<style type="text/css">
    #oTime {
             color: blue;
             font-size: 12px;            
    }
</style>
<script language="javascript">
    var _t;
    var _h = 2;
    var _m = 0;
    var _s = 0;
    var _v = formatTime(_h + ':' + _m + ':' + _s);

    function doTime() {
        _s --;
        if (_s == -1) {
             _m --;
             _s = 59;
        }
        if (_m == -1) {
             _h --;
             _m = 59;
        }
        var _b = ((_h == 0) && (_m == 0) && (_s == 0));
        if (_b) {
            _v = 'Welcome To IECN.NET';
            clearTimeout(_t);
        } else {
            _v = formatTime(_h + ':' + _m + ':' + _s);
            _t = setTimeout('doTime()', 1000);
        }
        document.all['oTime'].innerHTML = _v;
    }
  
    function formatTime(_time) {
        return _time.replace(/ (w) /g, '0$1');
    }

    onload = function() {
        document.all['oTime'].innerHTML = _v;
        _t = setTimeout('doTime()', 1000);
    }
</script>
<span id="oTime"></span>


ASP.NET Web数据控件
1、数据控件简介
这包括数据源控件和格式设置控件,前者使您可以使用 Web 控件访问数据库中的数据,后者使您可以显示和操作ASP.NET 网页上的数据。
2、数据控件
*  GridView 控件:以表的形式显示数据,并提供对列进行排序、翻阅数据以及编辑或删除单个记录的功能。
*  DetailsView 控件:一次呈现一条表格形式的记录,并提供翻阅多条记录以及插入、更新和删除记录的功能。DetailsView 控件通常用在主/详细信息方案中,在这种方案中,主控件(如 GridView 控件)中的所选记录决定了 DetailsView 控件显示的记录。
* FormView 控件:与 DetailsView 控件类似,它一次呈现数据源中的一条记录,并提供翻阅多条记录以及插入、更新和删除记录的功能。不过,FormView 控件与 DetailsView 控件之间的差别在于:DetailsView 控件使用基于表的布局,在这种布局中,数据记录的每个字段都显示为控件中的一行。而 FormView 控件则不指定用于显示记录的预定义布局。
* Repeater 控件:使用数据源返回的一组记录呈现只读列表。与 FormView 控件类似,Repeater 控件不指定内置布局。您可以使用模板创建 Repeater 控件的布局。
* DataList 控件:以表的形式呈现数据,通过该控件,您可以使用不同的布局来显示数据记录,例如,将数据记录排成列或行的形式。您可以对 DataList 控件进行配置,使用户能够编辑或删除表中的记录。(DataList 控件不使用数据源控件的数据修改功能;您必须自己提供此代码。)DataList 控件与 Repeater 控件的不同之处在于:DataList 控件将项显式放在 HTML 表中,而 Repeater 控件则不然。
3、数据控件示例
示例1:GridView 控件
涉及的知识:数据绑定、排序、分页、选定内容、编辑、删除、模版
示例2:DetailsView 控件
注意:前面部分使用 DetailsView 控件时,用于启用编辑、插入和删除的选项不可用。这是因为 DetailsView 控件所绑定到的“SqlDataSource1”控件没有必需的 SQL 语句。现在已经配置数据源以包括更新语句,所以更新选项在 DetailsView 控件上可用。
注意:利用DetailsView 控件和GridView 控件结合实现主/详细信息页。
   选择“GridView”控件,并在“GridView 任务”菜单中选择“编辑列”。
   在“可用字段”下,打开“命令字段”节点,选择“选择”,然后单击“添加”将其添加。
   在“选定的字段”列表中,选择“选择”,然后在“CommandField”属性网格中,将其“SelectText”属性设
   置为“详细信息”。
   在“属性”窗口中确认其“DataKeyNames”属性的设置。
  选择DetailsView 控件,设置另一个数据源,因其有条件查询。根据上面的选择对应显示该信息。
注意:利用DetailsView 控件和GridView 控件结合实现不同页的主/详细信息。
利用超链接来传递值,所以主页gridview控件添加超链接控件,DataNavigateUrlFields ,指示超链接应从“**”列获取其值 DataNavigateUrlFormatString :XX.aspx?cid={0} 创建用来导航到 xx.aspx 页的硬编码链接。该链接还传递名为 cid 的查询字符串变量,该变量的值将使用 DataNavigateUrlFields 属性中引用的列进行填充。
示例3:FormView 控件
注意:与DetailsView 控件的区别:它可以根据数据的具体情况可以自己设定显示布局,以及编辑、插入操作时的布局。
注意:绑定表达式
<%# Eval("字段名") %>
<%# Bind("字段名") %>
区别:eval是只读数据,bind是可更新的.Eval 单向绑定:数据是只读的
Bind 双向绑定:数据可以更改,并返回服务器端,服务器可以处理更改后的数据,如存入数据库.
ASP.NET内置组件对象
1、Response对象
Response对象是HttpResponse类的一个实例。该类主要是封装来自ASP.NET操作的HTTP响应信息。
Response对象的属性
BufferOutput :获取或设置一个值,该值指示是否缓冲输出,并在完成处理整个页之后将其发送 如果缓冲了到客户端的输出,则为true;否则为false。默认为true 。
Cache :获取Web页的缓存策略(过期时间、保密性、变化子句) 包含有关当前响应的缓存策略信息的HttpCachePolicy对象。
Charset: 获取或设置输出流的HTTP字符集 输出流的HTTP字符集
IsClientConnected :获取一个值,通过该值指示客户端是否仍连接在服务器上 如果客户端当前仍在连接,则为true;否则为false。
Response对象的方法
Write:将指定的字符串或表达式的结果写到当前的HTTP输出
End :停止页面的执行并得到相应结果
Clear :用来在不将缓存中的内容输出的前提下,清空当前页的缓存,仅当使用了缓存输出时,才可以利用Clear方法
Flush :将缓存中的内容立即显示出来。该方法有一点和Clear方法一样,它在脚本前面没有将Buffer属性设置为True时会出错。和End方法不同的是,该方法调用后,该页面可继续执行
Redirect: 使浏览器立即重定向到程序指定的URL
2、Request对象
Request对象是HttpRequest类的一个实例。它能够读取客户端在Web请求期间发送的HTTP值。
Request对象的集合
五个获取客户端资料的顺序:QueryString/Form/Cookies/ServerVariables/ClientCertificate
例:Request.ServerVariables("环境变量")
3、server对象
Server对象的MapPath方法将虚拟路径或相对于当前页的相对路径转化为Web 服务器上的物理文件路径。
server.mappath("/")     服务器主目录物理路径
server.mappath(".")     当前目录物理路径      
server.mappath("..")    父目录物理路径
response.write("<b>asd</b>")
response.write("<br>")
response.write server.htmlencode("<b>asd</b>")
4、Session对象
        Session对象是HttpSessionState的一个实例。该类为当前用户会话提供信息,还提供对可用于存储信息的会话范围的缓存的访问,以及控制如何管理会话的方法。
        Session的发明是填补HTTP协议的局限,HTTP协议工作过程是,用户发出请求,服务器端做出响应,这种用户端和服务器端之间的联系都是离散的,非连续的。在HTTP协议中没有什么能够允许服务器端来跟踪用户请求的。在服务器端完成响应用户的请求后,服务器端不能持续与该浏览器保持连接。从网站的观点上看,每一个新的请求都是单独存在的,因此,当用户在多个主页间转换时,就根本无法知道他的身份。
         可以使用Session对象存储特定用户会话所需的信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
ASP.NET的Sessions非常好用,能够利用Session对象来对Session全面控制,如果需要在一个用户的Session中存储信息,只需要简单地直接调用Session对象就可以了,下面就是个例子:
Session("Myname")=Response.form("Username")
Session("Mycompany")=Response.form("Usercompany")
很明显,对于不同的用户,Session对象的Myname变量和Mycompany变量各自是不同的,当每个人在网站的不同主页间浏览时,这种针对个人的变量会一直保留,这样作为身份认证是十分有效的。
Session对象的属性
Count属性可以帮助统计正在使用的Session对象的个数,语句非常简单,示例如下:
Response.Write(Session.Count)
Timeout属性设置了Session的生存期:Session.timeout=5
5、Application对象
计数器实例:Lock和UnLock方法确保同一时刻仅有一个客户可以修改和存取Application变量。
Application.Lock '讲解
Application("CountWeb") = Application("CountWeb")+1 '累加器,点击数加1
Application.UnLock
Response.Write "WEB服务器关闭重启前该页的点击总数为: " & Application("CountWeb")

国庆节!!
无聊的我继续着我的程序,不再沉默中爆发,就在沉默中灭亡。
默认分类 | 阅读 9979 次
文章评论,共0条
游客请输入验证码
文章归档
最新评论