viewstate 的用法

最近接触ViewState,很是迷茫,代码如下:Default.aspx.cs:publicpartialclass_Default:System.Web.UI.Page... 最近接触ViewState,很是迷茫,代码如下:
Default.aspx.cs:
public partial class _Default : System.Web.UI.Page
{

protected void Page_Load(object sender, EventArgs e)
{

if (!IsPostBack)
{
ViewState["ShowRightAns"] = false;
BindDate();
}

}
protected void Button1_Click(object sender, EventArgs e)
{
string StuAnswer="";
for (int i = 0; i < GridView1.Rows.Count; i++)
{
if ((GridView1.Rows[i].FindControl("choice1") as RadioButton).Checked)
StuAnswer += "|1";
else if ((GridView1.Rows[i].FindControl("choice2") as RadioButton).Checked)
StuAnswer += "|2";
else if ((GridView1.Rows[i].FindControl("choice3") as RadioButton).Checked)
StuAnswer += "|3";
else if ((GridView1.Rows[i].FindControl("choice4") as RadioButton).Checked)
StuAnswer += "|4";
else
StuAnswer += "|0";
}
ViewState["ShowRightAns"] = true;
Response.Write(StuAnswer);
}
private void BindDate()
{
try
{
SqlConnection conn = DAL.DB.conn();
string sql = "select top 10 * from [Exam_Question] order by newid()";
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
sda.Fill(ds);
this.GridView1.DataSource = ds.Tables[0].DefaultView;
this.GridView1.DataBind();
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
}
}

Default.aspx:

<asp:Label ID="Label1" runat="server" Text=' <%#"正确答案:"+Eval("Answer") %>' Visible=' <%#ViewState["ShowRightAns"] %>'> </asp:Label>

在开始的时候我在page_load 里初始化使viewstate["ShowRightAns"]=false,这样不显示正确答案,然后button_click后将viewstate["ShowRightAns"]=true,然后返回到那个页面,按我的要求应该是能显示答案,可是怎么都没有显示,可能我对viewstate的还不是很明白,请各位高手赐教!!!Thank you!!!
看了那图,更不明白,不太清楚页面加载时,如我上面贴的代码,是不是又重新对viewsate进行了赋值,使我后面button_click事件对viewstate值的改变又一次覆盖了,所以button_click其实根本没起什么作用,如果是这样,又如何保留这个经过改变的viewstate的值呢?谢谢!

回复二楼:恩,是在ItemTemplate,那我在页面加载时如何重新计算表达式的值呢,请赐教,谢谢!

首先感谢二楼,您的第一种方法我已经想到过了,如果viewstate不好用的话,就像这样!
展开
 我来答
iceser
2008-11-02 · TA获得超过2708个赞
知道大有可为答主
回答量:695
采纳率:100%
帮助的人:453万
展开全部
<asp:Label ID="Label1" runat="server" Text=' <%#"正确答案:"+Eval("Answer") %>' Visible=' <%#ViewState["ShowRightAns"] %>'> </asp:Label>

这是GridView1的ItemTemplate里的么?

还是在哪里的?你是改变了ViewState,但是你让上面那个控件重新计算表达式的值了吗?

既然没有重新计算表达式的值,那又怎么会显示出来呢?。

//--补充
实际上,对让GridView1内部的控件重新计算表达式的最好方法就是重新绑定数据,但是我看了你的代码,好像你在里面存储有用户选择的值是么,所以你有几种方法,一种就是像你获取用户选择的项那样,每一行去找出那个Label,然后设置它的Visible属性,另一种方法就是处理你的数据源,让用户选择影响到数据源,然后重新绑定,就可以了。
phoebuswei
2008-11-01 · TA获得超过608个赞
知道小有建树答主
回答量:707
采纳率:0%
帮助的人:673万
展开全部
给你个图一看就明白
不明白在说
http://farm1.static.flickr.com/87/243496688_3e84cfc8c2_o.jpg
-------------
其实他就是一个html的数据缓存层
只是当前有效
你只说你迷茫你那里迷茫啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ro...6@163.com
2008-11-06 · TA获得超过151个赞
知道答主
回答量:204
采纳率:0%
帮助的人:119万
展开全部
我个人觉得你用的方法太麻烦...
你可以直接buttonclick这样写:this.lable.text="正确答案:"
+("Answer")
this.lable.visible=true;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式