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不好用的话,就像这样! 展开
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不好用的话,就像这样! 展开
3个回答
展开全部
<asp:Label ID="Label1" runat="server" Text=' <%#"正确答案:"+Eval("Answer") %>' Visible=' <%#ViewState["ShowRightAns"] %>'> </asp:Label>
这是GridView1的ItemTemplate里的么?
还是在哪里的?你是改变了ViewState,但是你让上面那个控件重新计算表达式的值了吗?
既然没有重新计算表达式的值,那又怎么会显示出来呢?。
//--补充
实际上,对让GridView1内部的控件重新计算表达式的最好方法就是重新绑定数据,但是我看了你的代码,好像你在里面存储有用户选择的值是么,所以你有几种方法,一种就是像你获取用户选择的项那样,每一行去找出那个Label,然后设置它的Visible属性,另一种方法就是处理你的数据源,让用户选择影响到数据源,然后重新绑定,就可以了。
这是GridView1的ItemTemplate里的么?
还是在哪里的?你是改变了ViewState,但是你让上面那个控件重新计算表达式的值了吗?
既然没有重新计算表达式的值,那又怎么会显示出来呢?。
//--补充
实际上,对让GridView1内部的控件重新计算表达式的最好方法就是重新绑定数据,但是我看了你的代码,好像你在里面存储有用户选择的值是么,所以你有几种方法,一种就是像你获取用户选择的项那样,每一行去找出那个Label,然后设置它的Visible属性,另一种方法就是处理你的数据源,让用户选择影响到数据源,然后重新绑定,就可以了。
展开全部
给你个图一看就明白
不明白在说
http://farm1.static.flickr.com/87/243496688_3e84cfc8c2_o.jpg
-------------
其实他就是一个html的数据缓存层
只是当前有效
你只说你迷茫你那里迷茫啊
不明白在说
http://farm1.static.flickr.com/87/243496688_3e84cfc8c2_o.jpg
-------------
其实他就是一个html的数据缓存层
只是当前有效
你只说你迷茫你那里迷茫啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我个人觉得你用的方法太麻烦...
你可以直接buttonclick这样写:this.lable.text="正确答案:"
+("Answer")
this.lable.visible=true;
你可以直接buttonclick这样写:this.lable.text="正确答案:"
+("Answer")
this.lable.visible=true;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询