有两个网页,第一个网页投票,将投票数用Application["votes"]存储。
然后在第二个网页中取出Application["votes"],用label显示。
但在第二个网页中无法正确显示,编程调试了一下,发现Application["votes"]=null,
为什么会这样?第二个网页置于第一个网页之后,不知道这跟网页放置顺序又没有关系?
用session传也是一样的问题,不知道是不是网页的设置属性有问题?
搞了两天了也没能解决。
然后在第二个网页中取出Application["votes"],用label显示。
但在第二个网页中无法正确显示,编程调试了一下,发现Application["votes"]=null,
为什么会这样?第二个网页置于第一个网页之后,不知道这跟网页放置顺序又没有关系?
用session传也是一样的问题,不知道是不是网页的设置属性有问题?
搞了两天了也没能解决。
解决方案 »
- 求助,UDP分段发送数据报的问题
- wpf控件事件问题
- FarPoint.Win.Spread.StyleInfo(C#版的,该StyleInfo是针对单元格级别操作的,有人会用吗?)
- 请教wcf 数据库方面的问题
- 我定义了一个DataTable类型,并添加了些数据,但不知怎么修改,望指教!
- C#开发windows app中得到数据表中的数据的问题
- C#中添加目录的问题
- RECORDSET的LOCKTYPE属性值为AdLockOptimistic 有一注解为:直到调用Update,数据才解决锁定 ,是啥意思
- 参加鸡鸣益软件测试,将会在正式版发布时免费获得注册码!
- 现在机器装不了.NET我又想学C#请问哪有c#的编译器下载?谢谢
- [来抢分]求助TreeView中两个节点关系的判断
- 关于程序自动更新的问题
2,在赋值时,先进行锁定
Application["votes"].Lock();
if(Application["votes"]!=null)
Application["votes"] = (int)Application["votes"];//假如存入的是int类型
else
Application["votes"] = 0;
Application["votes"].UnLock();
第一个用于投票的网页中包含若干个二选一的单选题,每个单选题设两个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显示投票结果,则显示是正确的,但传到第二页就不对了。
不知道是不是跟网页的执行顺序有关?
在网上搜了一下,问题解决了。
原来问题的关键不是application,session的问题,而是链接页面时,不应该用button的postbackurl属性来链接页面,而是应该用
Server.Transfer("Result.aspx");
用button的postbackurl时就经常报没有实例化的错误,或是传不过去。
而用Server.Transfer("Result.aspx");后,就怎么传都可以了。
不知道为什么,大家讨论下就结帖。:)
-----------------------------------------------------------------------------------msdn上说:
单击 Button 控件时从当前页发送到的网页的 URL。默认值为空字符串 (""),表示将页回发到自身,PostBackUrl 属性使您可以使用 Button 控件执行跨页发送。将 PostBackUrl 属性设置为单击 Button 控件时要发送到的网页的 URL。例如,指定为 Page2.aspx 将使包含 Button 控件的页面发送到 Page2.aspx。如果不指定 PostBackUrl 属性的值,则页面回发到自身。postbackurl是跨页传送啊,怎么回送啊?
讨论下:)