我叫大伙都进来是看看我的问题哈哈~~
先用文字描述一下,如下:
我用XMLHttpRequest对象每隔2秒调用一个名称叫ProgressBarServlet.aspx的页面,并传值:
ProgressBarServlet.aspx?task=poll这样。在我的ProgressBarServlet.aspx.cs文件里初始化了一个计数器,我想让这个计数器在我每2秒调用这个页面的时候让它自增1。但是很遗憾,没有成功,因为每次调用这个页面都会初始化这个计数器,所以这个计数器它总是1。我想问的是,我该怎么去修改一下我的程序,让这个计数器能只初始化一次,然后一直自增1。下面是我贴出我的ProgressBarServlet.aspx.cs里的代码。不多而且很简单,请大家费点眼神帮我看一下,谢谢!!
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Text;namespace AjaxTestjcjc.page91
{
    public partial class ProgressBarServlet : System.Web.UI.Page
    {
        private int counter = 1;//计数器,就是它!!!!        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Request.QueryString["task"] != null)
                {
                    doGet();
                }
            }
           
        }        protected void doGet()
        {
            string task = Request.QueryString["task"].ToString();
            string res = "";            if (task == "create")
            {
                res = "<key>1</key>";
            }
            else
            {
                //task为poll
                string percent = "";
                switch (counter)
                {
                    case 1: percent = "10"; break;
                    case 2: percent = "23"; break;
                    case 3: percent = "35"; break;
                    case 4: percent = "51"; break;
                    case 5: percent = "64"; break;
                    case 6: percent = "73"; break;
                    case 7: percent = "89"; break;
                    case 8: percent = "100"; break;
                }
                counter++;                res = "<percent>" + percent + "</percent>";
            }
            StringBuilder sb = new StringBuilder();
            sb.Append("<response>");
            sb.Append(res);
            sb.Append("</response>");            Response.Clear();
            Response.ContentType = "text/xml";
            Response.Write("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
            Response.Write(sb);
            Response.End();
        }
    }
}请大家在午饭吃饱喝足后帮偶看看,不胜感激!

解决方案 »

  1.   

    private int counter
    {
      get{ return (int)(application["counter"] ?? 0); }
      set{ application["counter"] = value;}
    }
      

  2.   

    那当然 ProgressBarServlet 变量的生命周期在一次请求之内,用static or Application
      

  3.   

    you can define a static variable, like this :
    public static int counter = 1;
      

  4.   

    "XMLHttpRequest对象每隔2秒调用一个名称叫ProgressBarServlet.aspx的页面. "static可以???
      

  5.   


    答案是不可以,我用static实验过了已经。Application的思路我也想过了,总感觉不太好!不知道还有没有别的思路。存在数据库了总感觉有点夸张。。不用这么费事吧?大家再看看,不够分可以加!
      

  6.   

    我的第一想法是在web.config,定义一个常量,但是想想不行.如果是时间的话,做一下判断,设置一个起点,用秒数除二,应该可以把
      

  7.   

    存数据库的方法我该怎么写?
    把从数据库里取值这一步操作写在页面的什么地方?
    我这个页面是每过两秒就会调用一次的。写在什么地方都觉得不合适啊。这个程序实际上就是模拟一个进度条的功能。那AJAX那些控件里的进度条是怎么实现的?我练习这个程序的目的就是想弄明白内部的实现原理。 知道的哥们可以指点一下。
      

  8.   


    中的??是什么意思呢?
    我只知道这种情况下用
    int? num = null;
    int? result = num*2 ?? 5;   //result=5
    不知道这个"??"在这起一个什么作用呢??
      

  9.   

    private const string COUNTER = "Counter";
    private int IncreaseCounter()
    {
      int c = Utitlity.ConvertObjectToInt(ViewState[COUNTER]);
      ViewState[COUNTER] = ++ c;  return c;
    }        //In the Utility class.
            public static int ConvertObjectToInt(object viewStateValue)
            {
                int id;            if (viewStateValue != null && (!string.IsNullOrEmpty(viewStateValue.ToString()))
                    && int.TryParse(viewStateValue.ToString(), out id))
                {
                    return id;
                }
                else
                {
                    return 0;
                }
            }