首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • viewstate 的用法~~~~ [已结帖,结帖人:zimu312500]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zimu312500
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-11-01 18:08:36 楼主
    最近接触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!!!
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sp1234
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 18:45:531楼 得分:10
    换一种有效的编程方法,参考:http://www.google.cn/search?hl=zh-CN&newwindow=1&rls=com.microsoft%3A*%3AIE-SearchBox&rlz=1I7GGIJ&q=Scott+Mitchell+%E7%9A%84ASP.NET+2.0%E6%95%B0%E6%8D%AE%E6%95%99%E7%A8%8B&btnG=Google+%E6%90%9C%E7%B4%A2&meta=&aq=f&oq=
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sp1234
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 18:47:002楼 得分:0
    你在asp.net2.0的编程方法中,看不到类似:

            if (!IsPostBack)
            {
              BindDate();   
            }

    这样的代码。你的问题可以因此而彻底解决。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zimu312500
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 18:51:443楼 得分:0
    谢谢楼上,先学习下!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bossma
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 18:53:504楼 得分:10
    可能和页面加载顺序有关;可以在页面回发后 BindDate()看看
    看看这个,做个测试应该就知道原因了
    http://chensujun.blog.sohu.com/71633710.html

    ViewState["ShowRightAns"] = true; 执行的时间
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • simson2010
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 23:14:465楼 得分:5
    BindData()只在第一次请求页面时发生,即以后每次PostBack时,页面类只从ViewState中取得数据绑定GridView(注:发生在Page_Load()中),而Button_Click是发生Page_Load()之后,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • forthx
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-02 00:16:096楼 得分:0
    哦~我也疑惑这个加载顺序的问题呢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zimu312500
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-02 10:45:157楼 得分:0
    引用 5 楼 simson2010 的回复:
    BindData()只在第一次请求页面时发生,即以后每次PostBack时,页面类只从ViewState中取得数据绑定GridView(注:发生在Page_Load()中),而Button_Click是发生Page_Load()之后,

    也就是说当页面重新加载的时候,viewstate中根本没有保存我在Button_click里改变的值?那应该怎么实现我要的效果呢?而且有一种情况就是当我对页面进行分页时,点击下一页,然后再点击上一页,上一页选择的值就没了,看来viewstate保留的是当前页面的值,而且只对当前页面有效,看来如果还要保留那个值的话,还得专门进行记录!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mengxj85
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-02 12:34:568楼 得分:0
    学习,ViewState有些神秘
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yistudio
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-02 12:49:239楼 得分:5
    “然后返回到那个页面”——这样的话页面重新被加载,page_load又被执行一遍,你的那个viewstate当然始终是false啦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zimu312500
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-02 13:36:5210楼 得分:0
    引用 9 楼 yistudio 的回复:
    “然后返回到那个页面”——这样的话页面重新被加载,page_load又被执行一遍,你的那个viewstate当然始终是false啦


    是的,不过我是放在If(!Ispostback)里,第二次加载时并不会又对viewstate重新进行赋值啊。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • konglingkang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-03 18:53:0511楼 得分:0
    页面当你点击的时候页面回调了 就不执行!IsPostBack的代码了!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yistudio
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-03 19:14:2912楼 得分:0
    记得没错的话 !Ispostback 只是在页面刷新的时候不被执行吧,页面加载可是要执行的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zimu312500
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-04 08:58:1513楼 得分:0
    是啊,不执行!IsPostBack,所以不会对viewstate重新进行赋值了啊。不过看到12楼的解释,又有些困惑了,页面刷新和页面加载这2个又有什么区别!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gdf2627
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-04 10:13:2114楼 得分:10
    自己写个文件测试吧,我一直都不明白ViewState与全局变量有什么不同?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • takako_mu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-04 10:37:2315楼 得分:0
    我對if (!IsPostBack)也很感冒,到現在都不會,跟你同樣的疑惑。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mingch516548094
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-04 10:38:5116楼 得分:0
    帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cylkiss
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-04 10:49:4117楼 得分:0
    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • conan19771130
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-04 10:58:3118楼 得分:0
    debug
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jxph123535
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-04 11:05:0319楼 得分:10
    e~~

    简单的说
    页面首次加载不是PostBack 
    引用Microsoft的一段解释:
    {
    Page_Load:出现此事件期间,您可以执行一系列的操作来首次创建 ASP.NET 页面或响应由投递引起的客户端事件。在此事件之前,已还原页面和控件视图状态。使用 IsPostBack 页面属性检查是否为首次处理该页面。如果是首次处理,请执行数据绑定。此外,请读取并更新控件属性。
    }

    看杂文野史  不如看微软的正统
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jxph123535
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-04 11:15:5020楼 得分:0
    说句不太严紧的话

    你可以把页面的首次加载看成是Client 用Get方法访问Server

    其他的表单的访问全部都是Post

    这点可能会让你略微的理解
    Frist_load others_load的区别
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zimu312500
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 10:33:2221楼 得分:0
    非常感谢楼上的几位,虽然搞的还是模棱两可!呵呵!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved