求解,将最新的数据保存到viewstate中为什么每次得到的都是初始保存进去的数据.public string ReaderQuestion(string type)
        {            //所有题目
            DataTable ddt = (DataTable)ViewState["question"];
            //获取选择的答案
            string answer = Request.Form["answer"];
            //获取题目序号
            int num = Convert.ToInt32(hidNum.Text);
            int sum = Convert.ToInt32(HidSum.Text);
            //给上一题的答案赋值
            if (num - 1 >= 0)
            {
                ddt.Rows[num - 1]["Answer"] = answer;
            }
            if (type == "up")
            {
                if (num <= sum && num > 0)
                {
                    num = num - 1;
                }
            }
            else if (type == "next")
            {
                if (num < sum)
                {
                    num = num + 1;
                }
            }
            hidNum.Text = num.ToString(); ;
            //查询当前序号的题目信息
            DataRow[] drs = ddt.Select(string.Format("QuestionNum={0}", num));
            if (drs.Length > 0)
            {
                DataRow dr = drs[0];
                StringBuilder sb = new StringBuilder();
                sb.Append("<table cellpadding=\"3\" cellspacing=\"0\" border=\"0\" class=\"intable\"><tr><td class=\"borr\" colspan=\"4\"><div>");
                sb.Append(num + "." + dr["Title"]);
                sb.Append("</div></td></tr><tr>");
                string QuestionType = dr["QuestionType"].ToString().Trim();
                //判断题目类型生成不同的HTML
                if ("多选".Trim().Equals(QuestionType))
                {
                    string[] selectAn = dr["SelectAn"].ToString().Split('|');
                    for (int i = 0; i < selectAn.Length; i++)
                    {
                        sb.Append("<td class=\"bor\"><input id=\"input_" + i + "\" type=\"checkbox\"  name=\"answer\" value=" + selectAn[i] + "/>" + selectAn[i] + "</td>");
                    }
                }
                else if ("单选".Trim().Equals(QuestionType))
                {
                    string[] selectAn = dr["SelectAn"].ToString().Split('|');
                    for (int i = 0; i < selectAn.Length; i++)
                    {
                        sb.Append("<td class=\"bor\"><input id=\"input_" + i + "\" type=\"radio\"  name=\"answer\" value=" + selectAn[i] + " />" + selectAn[i] + "</td>");
                    }
                }
                else if ("更多题型".Trim().Equals(QuestionType))
                {                }
                sb.Append("</tr></table>");
                ViewState["question"] = ddt;  //将最新的数据保存到viewstate中  
                return sb.ToString();
            }
            else
            {
                return "已经没有题目了!";
            }
        }

解决方案 »

  1.   

    值改变了,就是点下一题的时候veiwstate中的值又变成初始值了.
      

  2.   

    真纠结,换成Cache可以为什么Viewsta就不行了.郁闷.
      

  3.   

    ReaderQuestion 这是一个属性么?估计这个属性每次都会被初始化的
      

  4.   

    你把这个定义的,Load 事件中,并且在页面 展示的时候 初始化,之后在回发的时候不要对其操作,应该不会出现你说的那种情况的。
            if (!ispostback)
    {
     定义在这个里边;
    }
    其他事件只对其修改。