码迷,mamicode.com
首页 > 移动开发 > 详细

asp.net application

时间:2015-07-01 17:29:06      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

Application 对象用于存储和访问来自任何页面的变量,类似于 session 对象。不同之处在于,所有的用户分享一个 Application 对象,而 session 对象和用户的关系是一一对应的。Application 对象握有会被应用程序中的许多页面使用的信息(比如数据库连接信息)。这意味着可以从任何的页面访问这些信息。同时也意味着你可在一个地点改变这些信息,然后这些改变会自动反映在所有的页面上。

application的创建和获取和session一样:

application["keyName"]=...;或application.add("keyName",value)。赋值内容可以是任意类型的数据。通过application["keyName"]获取的值是一个object对象,需要显示转换类型。

由于application是在整个程序中的,是所有用户共用的,因此在进行修改的时候,为了避免另一个用户也在修改,需要对其加锁和解锁。

application.lock();

application["keyName"]=....

application.unlock();

同样的,清除application也需要加锁和解锁。application.remove("keyName")清除某一项,application.clear()清除所有。

application的这种特性可以用来记录网站的访问量。

技术分享

protected void Button5_Click(object sender, EventArgs e)
    {
        if (Application["app_count"] != null)
        {
            Application.Lock();
            Application["app_count"] = (int)Application["app_count"] + 1;
            Application.UnLock();
        }
        else
        {
            Application.Lock();
            Application["app_count"] = 1;
            Application.UnLock();
        }
    }
    protected void Button7_Click(object sender, EventArgs e)
    {
        if (Application["app_count"] != null)
            Button7.Text = "点击查看当前计数:" + Application["app_count"].ToString();
        else
            Button7.Text = "没有计数的application";
    }
    protected void Button6_Click(object sender, EventArgs e)
    {
        Application.Lock();
        Application.Remove("app_count");
        Application.UnLock();
    }

运行后,在浏览器中用两个网页来打开这个页面,分别查看点击按钮之后,在另一个页面查看当前计数的变化。

 

一个简单的聊天室

技术分享

首先是设计登陆页面:

技术分享

技术分享

登录按钮:

protected void Button1_Click(object sender, EventArgs e)
{
Session["uid"] = TextBox1.Text;
Server.Transfer("Default2.aspx");
}

然后设计聊天页面:

 

<meta http-equiv="refresh" content="5"/><!--这个用于页面自动刷新,每隔5秒刷新一次,添加到head标签中-->

 

<form id="form1" runat="server">
    <div>
        <asp:Panel ID="Panel1" runat="server" BorderColor="#FF9933" BorderStyle="Double" Height="369px" ScrollBars="Vertical" Width="536px"></asp:Panel>
        <asp:Panel ID="Panel2" runat="server">
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:Button ID="Button1" runat="server" Text="发送" OnClick="Button1_Click" />
            <asp:Button ID="Button2" runat="server" Text="退出聊天" OnClick="Button2_Click" />
        </asp:Panel>
    </div>
    </form>

 

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["uid"] == null)//这个session是每个用户独自有一个
            Response.Redirect("Default.aspx");
        if (Application["chat"] == null)//application是所有用户共用一个
            Application["chat"] = new Panel();
        Panel1.Controls.Add((Panel)Application["chat"]);
    }

    protected void Button2_Click(object sender, EventArgs e)
    {//退出聊天
        Session.Remove("uid");
        Response.Redirect("Default.aspx");
    }
    protected void Button1_Click(object sender, EventArgs e)
    {//发送
        Label uid = new Label();
        uid.Text = Session["uid"].ToString();
        Label dt = new Label();
        dt.Text = DateTime.Now.ToLongTimeString()+":";
        Label word = new Label();
        word.Text = TextBox1.Text;
        Literal lbr = new Literal();
        lbr.Text = "<br/>";
        Application.Lock();
        ((Panel)Application["chat"]).Controls.AddAt(0, lbr);
        ((Panel)Application["chat"]).Controls.AddAt(0, word);
        ((Panel)Application["chat"]).Controls.AddAt(0, dt);
        ((Panel)Application["chat"]).Controls.AddAt(0, uid);
        Application.UnLock();
    }
}

运行:在登录界面登录张三和李四,

然后分别进入各自的聊天界面

这是李四的

技术分享

这是张三的

技术分享

每次在刷新的时候,发送按钮前面的文本框里的内容会被清除掉。这是因为这个刷新是整个页面的刷新,并不是局部刷新。这个刷新还有一个地方需要注意,那就是在第一个用户登录后,如果没有第一时间发送信息,那么在5秒后会自动跳回登录页面,似乎if (Session["uid"] == null)这个判断的结果是true,这点一直没弄明白。

要想实现局部刷新,可用AJAX,Jquery和iFrame。

利用iframe:

首先是新建一个页面default3

<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <meta  http-equiv="refresh" content="5"/>
</head>
<body>
    <form id="form1" runat="server">
    <div runat="server" id="holder">
        
    </div>
    </form>
</body>

后台代码:

protected void Page_Load(object sender, EventArgs e)
    {
        if (Application["chat"] == null)
            Application["chat"] = new Panel();
        holder.Controls.Add((Panel)Application["chat"]);
    }

对于之前的聊天页面default2做如下修改:

首先去掉自动刷新的标记:

技术分享

然后将显示聊天记录的panel也去掉,同时添加iframe:

技术分享

default2的后台代码

 protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["uid"] == null)
            Response.Redirect("Default.aspx");
        //if (Application["chat"] == null)
        //    Application["chat"] = new Panel();
        //Panel1.Controls.Add((Panel)Application["chat"]);
    //上面注释掉的这部分被移到default3中了
    }

然后运行:

登录两个用户后,可以看到,即使不发送任何信息,在5秒时间过后,自动刷新的话,也不会像之前那样跳回登录页面了,同时在发送了信息后,自动刷新也不会将文本框里面的内容给清除掉了。

asp.net application

标签:

原文地址:http://www.cnblogs.com/jin-/p/4613468.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!