比如,要注册一个新用户,我们往往在第一页上填写用户名,然后第二页填写密码,第三页填写相关的个人资料,这样三页就需要传递数据,以前asp通常的方法是在 <input>里面 hidden一个数据,实现多页面的传值。现在asp.net中,在网上看到贴子,据说通过viewstate就好办多了。请问大家这个该如何实现阿????  viewstate不是只能在本页面调用吗,上面这个东西该怎么做呢????

解决方案 »

  1.   

    ViewStat是基于客户端的状态管理,要在窗体间传值可以考虑通过Session,当然,在第二页和第三页可以先用ViewState暂存前一页面传过来的数据
      

  2.   

    如果你采用Server.Tranfer方法导航页面的话,还可以考虑在前一页定义一个变量,在下一页直接访问这个变量
      

  3.   

    To: 楼上,用Session好像不太好吧,“当然,在第二页和第三页可以先用ViewState暂存前一页面传过来的数据“恩就想知道这个,大哥,能否详细点啊,小弟愚昧啊~~~~~~不明白呀~!
      

  4.   

    如果你有Visual Studio.NET的话,在帮助中查询"在页间传递服务器控件值",里面说的很详细
      

  5.   

    是否真的需要三个页面呢?可以把三个页面的内容放在一个页面的三个 Panel 里根据需要控制 Panel 的 显示/隐藏
      

  6.   

    TO 楼上:
       
        放在一个页面和放在三个页面这我感觉都应该可以的,我只是想知道放在三个页面里用viewstate实现的方法啊?
      

  7.   

    第一页 :
    private void btnSearch_Click(object sender, System.EventArgs e)
    {
    ViewState["Sex"] = this.ddlSex.SelectedIndex.ToString() ;
       
    Server.Transfer("WebForm2.aspx");
    } public System.Web.UI.StateBag PublicViewState
    {
    get
    {
    return ViewState;
    }
    }
    第二页 :if (Context.Handler is WebForm1 )
    {
    WebForm1 form1 = (WebForm1 )Context.Handler;
    //
     strSex = (string)WebForm1.PublicViewState["Sex"];
    }
      

  8.   

    如果按照楼主的说法,要一个页面完成注册的话也是可以的!如果注册需要三个步骤的话,可以分别把这三个步骤的表单放在同一个页面的三个“Panel”中,然后通过Visible属性进行显示控制,同时,这样做的好处也在于,可以使用Viewstate共享数据~~缺点:代码太过于复杂~为了避免这个缺点,也可以将三个步骤的表单做成三个用户控件(ascx),然后在页面中动态调入,这样做既可以共享Viewstate数据,代码也可以拆分开来管理。
      

  9.   

    这种情况,建议还是在一个页面中做.
    你可放在服务端的TABLE里面,也可放在一个panel里面,每点击一个按钮,即到后台判断当前是哪个输入框被隐藏了,根据判断情况,再让其他行显示

    Visible="False"来控制.