各位有没有碰到过ViewStates丢失的情况?请帮忙测试一下,注意页面的两个Response.Write输出,我这里两个都不一样,第一个Response.Write似乎有延迟,总要到下一次按钮事件才显示出真实的值。到底是我系统问题还是什么?
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:Button ID="LinkFirst" runat="server" Text="第一页" OnClick="LinkFirst_Click" />
    <asp:Button ID="LinkUp" runat="server" Text="上一页" OnClick="LinkUp_Click" />
    <asp:Button ID="LinkDown" runat="server" Text="下一页" OnClick="LinkDown_Click" />
    <asp:HyperLink ID="HyperLink1" runat="server"></asp:HyperLink>&nbsp;
    [&nbsp;<asp:Label ID="Label3" runat="server"></asp:Label>&nbsp;]&nbsp;
    <asp:HyperLink ID="HyperLink2" runat="server"></asp:HyperLink>
    <asp:Button ID="LinkLast" runat="server" Text="最后页" OnClick="LinkLast_Click" />
</asp:Content>-------public partial class Basic_1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
            ViewState["CurrentP"] = 1;
            ViewState["TotalP"] = 6;
        }
        Response.Write (ViewState["CurrentP"].ToString());
    }    protected void Button1_Click(object sender, EventArgs e)
    {
        
    }
    protected void LinkFirst_Click(object sender, EventArgs e)   //第一页按钮
    {
        ViewState["CurrentP"] = 1;
        Response.Write(ViewState["CurrentP"].ToString());
    }
    protected void LinkUp_Click(object sender, EventArgs e)  //上一页按钮
    {
        ViewState["CurrentP"] = (int)ViewState["CurrentP"] - 1;
        Response.Write(ViewState["CurrentP"].ToString());
    }
    protected void LinkDown_Click(object sender, EventArgs e)  //下一页按钮
    {
        ViewState["CurrentP"] = (int)ViewState["CurrentP"] + 1;
        Response.Write(ViewState["CurrentP"].ToString());
    }
    protected void LinkLast_Click(object sender, EventArgs e)  //最后一页按钮
    {
        ViewState["CurrentP"] = (int)ViewState["TotalP"];
        Response.Write(ViewState["CurrentP"].ToString());
    }
}

解决方案 »

  1.   

    哦!是母板页!!
    默认的形式应该是这样!!
    <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    </asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    .............
    .............
    ......你的代码
    </asp:Content>
      

  2.   

    最好不要用viewstate,用session或request不会丢失.
      

  3.   

    不是master的问题的确很离奇应该是你的其他地方有问题吧
      

  4.   

    没有遇到过viewState丢失现象。倒是我始终坚持,那些写 Response.Write 的人应该下岗好好培训。你打开asp.net输出到客户端的html源代码看看,它还是一个完整的<html />元素吗?应该使用 RegisterStartupScript 和  RegisterClientScriptBlock。
      

  5.   


    public partial class Default2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ViewState["CurrentP"] = 1;
                ViewState["TotalP"] = 6;
            }
            Response.Write(ViewState["CurrentP"].ToString());   
            //首次加载: 1
            //点击第一页按钮后,
                //页面首先回传,触发page load事件;在此事件中,Response.Write 上次保存的viewstate值:1;
                //然后触发LinkFirst_Click
            //点击上一页按钮后,
                //页面首先回传,触发page load事件;在此事件中,Response.Write 上次保存的viewstate值:1;
                //然后触发LinkFirst_Click
        }    protected void Button1_Click(object sender, EventArgs e)
        {    }
        protected void LinkFirst_Click(object sender, EventArgs e)  //第一页按钮
        {
            ViewState["CurrentP"] = 1;
            Response.Write(ViewState["CurrentP"].ToString());
            //直到此时,ViewState["CurrentP"]的值才被改变成:1,并输出,所以页面会显示“11”
        }
        protected void LinkUp_Click(object sender, EventArgs e)  //上一页按钮
        {
            ViewState["CurrentP"] = (int)ViewState["CurrentP"] - 1;
            Response.Write(ViewState["CurrentP"].ToString());
            //直到此时,ViewState["CurrentP"]的值才被改变成:0,并输出,所以页面会显示“10”
        }
        protected void LinkDown_Click(object sender, EventArgs e)  //下一页按钮
        {
            ViewState["CurrentP"] = (int)ViewState["CurrentP"] + 1;
            Response.Write(ViewState["CurrentP"].ToString());
        }
        protected void LinkLast_Click(object sender, EventArgs e)  //最后一页按钮
        {
            ViewState["CurrentP"] = (int)ViewState["TotalP"];
            Response.Write(ViewState["CurrentP"].ToString());
        } 
    }
    楼主对回发机制、页面事件都没有真正理解~~~~~
    努力呀
      

  6.   

    这些代码是早期的练习代码,当时有点乱。不过大概记得是因为本来正常的代码出现了莫名其妙的情况,于是加入复杂的Response.Write去测试。最后没有解决问题,倒是重启以后,原始的代码工作正常了。各位碰到过这种情况吗——正常的代码突然失效,重启后就正常了。感谢freeflying1222的热心作答,也感谢各位朋友的解答。同时更为sp1234常年的热心解答,表示一种深切的敬佩。尽管可能没人看到这些感谢的话,但是帮助他人的精神是值得赞扬与提倡的。另:有兴趣的一起讨论互联网创业与运营话题的,可加QQ群 82439574。