C#入门经典(第6版)阅读笔记(第四篇)(ASP.NET WEB 编程)

目录

第十九章 ASP.NET WEB 编程

第十九章 ASP.NET WEB 编程

前言:由于目前我在这边以后主要做web端工作,所以中间的桌面应用暂且放一放。
试试创建一个简单的页面:

19.1 创建一个简单的web界面

第一步:先创建一个项目。


第二步:新建一个登录界面

界面显示

代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Registration.aspx.cs" Inherits="EventRegistration.Registration" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        table{background-color:#646464; color:White;}
        tr{height:30px;}
        #dropDownListEvents{width:100%;}
        input{width:98%;padding:0px;}
        #buttonSubmit{width:100%;height:30px;}
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table style="width:300px;margin:30px auto;" cellspacing="0">
        
            <tr>
                <td>
                    <asp:Label ID="labelEvent" runat="server" Text="Event:"></asp:Label>
                </td>
                <td>
                    <asp:DropDownList ID="dropDownListEvents" runat="server" >
                        <asp:ListItem>Introduce to ASP.NET</asp:ListItem>
                        <asp:ListItem>Introduce to MYNAME</asp:ListItem>
                        <asp:ListItem>Introduce to HELLOWORLD</asp:ListItem>
                        <asp:ListItem>Introduce to WINDOWS</asp:ListItem>
                    </asp:DropDownList>
                </td>
            </tr>

            <tr>
                <td>
                    <asp:Label ID="labelFirstName" runat="server" Text="First Name:"></asp:Label>
                </td>
                <td>
                    <asp:TextBox ID="textFirstName" runat="server"></asp:TextBox>
                </td>
            </tr>
            
            <tr>
                <td>
                    <asp:Label ID="labelLastName" runat="server" Text="Last Name:"></asp:Label>
                </td>
                <td>
                    <asp:TextBox ID="textLastName" runat="server"></asp:TextBox>
                </td>
            </tr>

            <tr>
                <td>
                    <asp:Label ID="labelEmail" runat="server" Text="Email:"></asp:Label>
                </td>
                <td>
                    <asp:TextBox ID="textEmail" runat="server"></asp:TextBox>
                </td>
            </tr>
            
            <tr>
                <td colspan="2">
                    <asp:Button ID="buttonSubmit" runat="server" Text="Submit"></asp:Button>
                </td>
            </tr>
        </table>
    
    </div>
    </form>

</body>
</html>

VS的代码提示功能感觉一点没有webstorm用着好用……或许是我还不熟悉怎么用吧,嘿嘿……
来看看显示界面的代码:

头部

少了后台的代码。
body部分:

body

多了两个div以及里面的input,命名也看不出的……
table里面的变化:


asp的控件是服务器端的控件,像是对html元素的一个封装,传到服务器,待到界面显示时,再还原成html代码。

注意:runat=“server”

  • 我测了下,这个地方,假设删了这句话,在界面上就不会做出显示
    百度说法:
  • 在html写了这句话后,这个控件就是服务器控件了;
  • 将ASPX中某个控件标识为服务器端的控件,使得服务端(CS)中可以直接访问它;
    *……

第三步:为button添加一个点击事件,然后获得输入的文字并显示出来

点击显示

点击事件代码:

 protected void buttonSubmit_Click(object sender, EventArgs e)
        {
            string selectEvent = dropDownListEvents.SelectedValue;
            string firstName = textFirstName.Text;
            string lastName = textLastName.Text;
            string email = textEmail.Text;
            labelResult.Text = String.Format("{0} {1} selected event {2}.",firstName,lastName,selectEvent);
        }
知识扩展,如何在第二个页面显示输入结果

在第二个界面上添加一个label,后台代码:

 protected void labelResult_Load(object sender, EventArgs e)
        {
            try
            {
                DropDownList dropDownListEvents = (DropDownList)PreviousPage.FindControl("dropDownListEvents");
                string selectEvent = dropDownListEvents.SelectedValue;
                string firstName = ((TextBox)PreviousPage.FindControl("textFirstName")).Text;
                string lastName = ((TextBox)PreviousPage.FindControl("lastFirstName")).Text;
                string email = ((TextBox)PreviousPage.FindControl("text.Email")).Text;
                labelResult.Text = String.Format("{0}{1} selected the event {2}",firstName,lastName,selectEvent);
            }
            catch
            {
                labelResult.Text = "The originating page must contain textFirstName,textLastName,textEmail controls";
            }
        }
19.2 常用控件与方法

推荐链接:http://www.tuicool.com/articles/eUfque#0-tsina-1-33421-397232819ff9a47a7b7e80a40613cfe1

19.3 ASP.NET AJAX 回送
简单样例

前端核心代码:

<form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                <asp:Button ID="Button1" runat="server" Text="Ajax Postback" OnClick="OnButtonClick" />
            </ContentTemplate>
        </asp:UpdatePanel>
        <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
        <asp:Button ID="Button2" runat="server" Text="ASP.NET PostBack" OnClick="OnButtonClick" />
    </div>

    </form>

后台核心代码(按钮点击事件):

protected void OnButtonClick(object sender, EventArgs e) 
        {
            DateTime now = DateTime.Now;
            Label1.Text = now.ToLongDateString();
            Label2.Text = now.ToLongDateString();
        }

通过代码,可以看出,明明是在一个函数下,可是点击第一个按钮时,第二个按钮左边的时间并没有显示,再看看直接点击第二个按钮:

直接点击第二个按钮

由两个事件可以看出,ajax只处理了部分,并没有把整个后台程序处理完,就进行了返回,也没有对服务器进行刷新……能力有限,暂且理解这么多……

19.4 ASP.NET 验证控件

简介: Asp.Net中内置的验证控件有:RequiredFieldValidation、RangeValidation、RegularExpressValidation、CompareValidation、CustomValidation和ValidationSummary等六种。其中用户自定义验证控件,由于并不非常常用(要自定义很多成分,包括函数等)。

19.5 状态管理
状态管理技术
19.5.1 客户端的状态管理(ViewState和Cookie)

  使用ViewState的缺点是,数据总是要从服务器传送给客户端,再从客户端传送给服务器,这增加了网络流量。为了减少网络流量,可以关闭ViewState。在Page指令把EnableViewState属性设置为false。


  ViewState只保存在一个页面中。如果状态应保存在多个不同的页面中,就应使用cookie在客户端保存状态。
  ViewState中的数据是不加密的,它们只是使用了base64编码格式进行编码。

Cookie语法
cookie的使用
Cookie缺陷
19.5.2 服务器端的状态管理(Session,Application,Cache)

  Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息。用户在应用程序的页面切换时,Session对象的变量不会被清除。
  对于一个Web应用程序而言,所有用户访问到的Application对象的内容是完全一样的;而不同用户会话访问到的Session对象的内容则各不相同。 Session可以保存变量,该变量只能供一个用户使用,也就是说,每一个网页浏览者都有自己的Session对象变量,即Session对象具有唯一性。

什么是Session

  Web是无状态的,他提供了一种新的方式:每次都通过用户对服务器提交请求而渲染新的网页。众所周知,HTTP是一种无状态协议,他不能通过页面和客户端保持连接。如果用户需要增加一些信息和跳转到了另外的页面,原有的数据将会丢失,用户将无法恢复这些信息。我们需要这玩意儿干嘛呢?我们需要保存信息!Session提供了一个在服务器端保存信息的方案。他能支持任何类型对象和用户对象信息作为对象保存起来。Session为每一个客户端都独立地保存,这意味着Session数据存储着每个客户端的基础信息。请看下图:


Session的利弊
  接下来我们讨论普通情况下使用Session的利弊,我会描述每一种Session的使用情境。
优点:

  • 他能在整个应用中帮助维护用户状态和数据。
  • 他能让我们简单地实现存储任何类型的对象。
  • 独立地保存客户端数据。
  • 对于用户来说,Session是安全的、透明的。

缺点:

  • 因为Session使用的是服务器的内存,所以在用户量大的时候会成为性能瓶颈。
  • 在序列化和反序列化的过程中他也会成为性能瓶颈,因为在StateServer(状态服务)模式和sql server模式下我们需要对我们存储的数据进行序列化和反序列化我们所存储的数据。
    Session 的使用
session的使用
application的使用


Cache的使用(高速缓存)

1.Cache 是怎么工作的

Cache 是分配在服务器上的一个公共的内存片。
  所谓公共指的cache只要一创建是所有一个客户端浏览器都能通过后台代码访问到他,他面向的是所有用户,相对而言session也是服务器上的一段内存,但他面向的是单个用户。他是服务器的一段内存块,也就是说每个cache一经创建就占用了服务器资源的。所以从这点来说我们就能说:并不是cache越多越好。
  cache 是有时间限制的,超过了服务器设定的过期时间,他就会被服务器回收。
  c.cache 能存放所有对象

2.Cache 怎么创建及怎么销毁

创建cache
  在。Net环境下通过Cache.Insert(string key,object o)方法创建。其中key 代表cache的ID,o代表存到cache里的对象。
  销毁cache.
  通过方法Cache.Remove(string key)其中key 代表cache的 ID.
  调用cache.
  Cache支持装箱/拆箱操作。如你能把一个DataSet对象ds通过Cache.Insert(“dsCache”,ds)的方式存到Cache中,能通过拆箱操作 DataSet ds = (DataSet)Cache[“dsCache”]来访问他。

3.什么时候用cache

Cache 一般用于数据较固定,用的较频繁的地方。例如能把进销存系统中能把产品信息存入cache,在用户调用产品信息时通过调用cache即可,这样从非常大程度上减少了用户和数据库的交互,提高了系统的性能。反之,cache不适合用在数据变动快,使用范围非常窄的地方。例如把一个具体采购单存入 cache中。
代码示例:

public class CookiesHelper  
    {  
    /**//// <summary>  
    /// 获取数据缓存  
    /// </summary>  
    /// <param name="CacheKey">键</param>  
    public static object GetCache(string CacheKey)  
    {  
        System.Web.Caching.Cache objCache = HttpRuntime.Cache;  
        return objCache[CacheKey];  
    }  
  
    /**//// <summary>  
    /// 设置数据缓存  
    /// </summary>  
    public static void SetCache(string CacheKey, object objObject)  
    {  
        System.Web.Caching.Cache objCache = HttpRuntime.Cache;  
        objCache.Insert(CacheKey, objObject);  
    }  
  
    /**//// <summary>  
    /// 设置数据缓存  
    /// </summary>  
    public static void SetCache(string CacheKey, object objObject, TimeSpan Timeout)  
    {  
        System.Web.Caching.Cache objCache = HttpRuntime.Cache;  
        objCache.Insert(CacheKey, objObject, null, DateTime.MaxValue, Timeout, System.Web.Caching.CacheItemPriority.NotRemovable, null);  
    }  
  
    /**//// <summary>  
    /// 设置数据缓存  
    /// </summary>  
    public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)  
    {  
        System.Web.Caching.Cache objCache = HttpRuntime.Cache;  
        objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration);  
    }  
  
    /**//// <summary>  
    /// 移除指定数据缓存  
    /// </summary>  
    public static void RemoveAllCache(string CacheKey)  
    {  
        System.Web.Caching.Cache _cache = HttpRuntime.Cache;  
        _cache.Remove(CacheKey);  
    }  
  
    /**//// <summary>  
    /// 移除全部缓存  
    /// </summary>  
    public static void RemoveAllCache()  
    {  
        System.Web.Caching.Cache _cache = HttpRuntime.Cache;  
        IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();  
        while (CacheEnum.MoveNext())  
        ...{  
            _cache.Remove(CacheEnum.Key.ToString());  
        }  
    }  
}  

推荐:http://www.cnblogs.com/fish-li/archive/2011/12/27/2304063.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,348评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,122评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,936评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,427评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,467评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,785评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,931评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,696评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,141评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,483评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,625评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,291评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,892评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,324评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,492评论 2 348

推荐阅读更多精彩内容