有两个网页,第一个网页投票,将投票数用Application["votes"]存储。
然后在第二个网页中取出Application["votes"],用label显示。
但在第二个网页中无法正确显示,编程调试了一下,发现Application["votes"]=null,
为什么会这样?第二个网页置于第一个网页之后,不知道这跟网页放置顺序又没有关系?
用session传也是一样的问题,不知道是不是网页的设置属性有问题?
搞了两天了也没能解决。

解决方案 »

  1.   

    1,如果是iis6,检查一下应用程序池的设置是否导致应用程序短时间内导致重新启动了应用程序
    2,在赋值时,先进行锁定
    Application["votes"].Lock();
    if(Application["votes"]!=null)
    Application["votes"] = (int)Application["votes"];//假如存入的是int类型
    else
    Application["votes"] = 0;
    Application["votes"].UnLock();
      

  2.   

    谢谢孟大哥的回复,不过本人实在太菜(才接触ASP.NET,C#一个月),如果解决不了问题,实在是本人太菜,孟大哥不用介怀。呵呵:)没用IIS,用VS2005自带的服务器development web server。程序很简单,包括两个网页。第一个网页用于投票,第二个网页显示投票结果。
    第一个用于投票的网页中包含若干个二选一的单选题,每个单选题设两个checkbox用作投票,
    将checkbox的autopostback设为true,每当客户选择时,就自动返回服务器,作相应处理。
    客户选择完毕后点击一个“确定”button,button的postbackurl属性设为投票结果页。
    并在cs程序中执行一个ConfirmButton_Click事件。代码如下:
    //第一个页面
    //引用文件
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Web.SessionState;//初始化,以一个单选题为例
    protected void Page_Load(object sender, EventArgs e)
        {
            public int votesOfPro1 = 4;//表示选项投票数的变量
            public int votesOfPro2 = 5;
            if (!IsPostBack)
            {
                initPage();
            }
        }
        public void initPage()
        {
           
            Compar1Choice1.Checked = true ;
            Compar1Choice1.Enabled = true ;
            Compar1Choice2.Checked = false ;
            Compar1Choice2.Enabled = false ;
            Application["votes1"] = 4;//随意设的初值
         } //用户点击一个checkbox以后,服务器做的操作,其中Compar*Choice*为checkbox的ID
     protected void Compar1Choice1_CheckedChanged(object sender, EventArgs e)
        {
            if (Compar1Choice1.Checked == true)
            {
                Compar1Choice2.Checked = false;
                Compar1Choice2.Enabled = false;
            }
            else
            {
                Compar1Choice2.Enabled = true;
                Compar1Choice2.Checked = false;
            }
        }    protected void Compar1Choice2_CheckedChanged(object sender, EventArgs e)
        {
            if (Compar1Choice2.Checked == true)
            {
                Compar1Choice1.Checked = false;
                Compar1Choice1.Enabled = false;
            }
            else
            {
                Compar1Choice1.Enabled = true;
                Compar1Choice1.Checked = false;
            }
        }
      
        //点击一个“清空”button重置初始状态
        protected void ClearButton_Click(object sender, EventArgs e)
        {
            initPage();
        }//点击“确定”button,执行ConfirmButton_Click事件,并转到下一个页面
    protected void ConfirmButton_Click(object sender, EventArgs e)
        {
            //根据checkbox的状态计票
    if (Compar1Choice1.Checked == true)
            {
                votesOfPro1++;
            }
            else 
                votesOfPro2++;        //将计票结果存入Application,留给下个页面调用
            Application.Lock();
            if (Application["votes1"] != null)
            {
               Application["votes1"] = votesOfPro1;//假如存入的是int类型
            }        
            else
                Application["votes1"] = 0;
            Application.UnLock();//第二页
    public partial class _Default : System.Web.UI.Page
    {
        int  votesOfPro11 = 8;//随意设票数选项初值
        int  votesOfPro12 = 9;
        protected void Page_Load(object sender, EventArgs e)
        {
            initResultPage();
         }
        //初始化
        private void initResultPage()
        {
            ResultLabel.Visible = true ;
            //取值
            Application.Lock();
            if (Application["votes1"] != null)
            {
                votesOfPro11 = (int)Application["votes1"];
            }
            else
                votesOfPro11 = 11;
            Application.UnLock();
            Application.Lock();
            if (Application["votes2"] != null)
            {
                votesOfPro12 = (int)Application["votes2"];
            }
            else
                votesOfPro12 = 12;
            Application.UnLock();
            ResultLabel.Text = "投票结果:" + votesOfPro11.ToString()    +votesOfPro12.ToString();
     }  
    执行以后,Application的值倒是传过去了,但是显示总是“投票结果:45”,也就是说无论在第一页怎么投票,总是显示给Application设的初值。
    由于网页总是在交互,所以不清楚为什么ConfirmButton_Click事件里Application的值没有改变?
    但把第二页断开,只在第一页用Application显示投票结果,则显示是正确的,但传到第二页就不对了。
    不知道是不是跟网页的执行顺序有关?
      

  3.   

    为什么非要用application呢,创建一个静态的类专门用来处理全局变量不是也可以吗?
      

  4.   

    IcyPlayer说得很对啊,不过我是菜鸟啊,这么高级的方法一时还学不会呀。
    在网上搜了一下,问题解决了。
    原来问题的关键不是application,session的问题,而是链接页面时,不应该用button的postbackurl属性来链接页面,而是应该用
                        Server.Transfer("Result.aspx");
    用button的postbackurl时就经常报没有实例化的错误,或是传不过去。
    而用Server.Transfer("Result.aspx");后,就怎么传都可以了。
    不知道为什么,大家讨论下就结帖。:)
      

  5.   

    什么意思,不懂,页面怎么跳转会影响application?
      

  6.   

    button的postbackurl是让页面回送,而Server.Transfer("Result.aspx")是重新加载,自然会得到不同的结果
      

  7.   

    button的postbackurl是让页面回送
    -----------------------------------------------------------------------------------msdn上说:
    单击 Button 控件时从当前页发送到的网页的 URL。默认值为空字符串 (""),表示将页回发到自身,PostBackUrl 属性使您可以使用 Button 控件执行跨页发送。将 PostBackUrl 属性设置为单击 Button 控件时要发送到的网页的 URL。例如,指定为 Page2.aspx 将使包含 Button 控件的页面发送到 Page2.aspx。如果不指定 PostBackUrl 属性的值,则页面回发到自身。postbackurl是跨页传送啊,怎么回送啊?
    讨论下:)
      

  8.   

    晕,甭管怎么回送,怎么影响application的