我叫大伙都进来是看看我的问题哈哈~~
先用文字描述一下,如下:
我用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();
}
}
}请大家在午饭吃饱喝足后帮偶看看,不胜感激!
先用文字描述一下,如下:
我用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();
}
}
}请大家在午饭吃饱喝足后帮偶看看,不胜感激!
{
get{ return (int)(application["counter"] ?? 0); }
set{ application["counter"] = value;}
}
public static int counter = 1;
答案是不可以,我用static实验过了已经。Application的思路我也想过了,总感觉不太好!不知道还有没有别的思路。存在数据库了总感觉有点夸张。。不用这么费事吧?大家再看看,不够分可以加!
把从数据库里取值这一步操作写在页面的什么地方?
我这个页面是每过两秒就会调用一次的。写在什么地方都觉得不合适啊。这个程序实际上就是模拟一个进度条的功能。那AJAX那些控件里的进度条是怎么实现的?我练习这个程序的目的就是想弄明白内部的实现原理。 知道的哥们可以指点一下。
中的??是什么意思呢?
我只知道这种情况下用
int? num = null;
int? result = num*2 ?? 5; //result=5
不知道这个"??"在这起一个什么作用呢??
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;
}
}