刚从C++Builder 转过来。。顶头上司要我们学准备转B/S结构我还是一点不知~~求指点要求是这样的,,2个页面,第一个页面里有姓名(TextBox),性别(RadioButton),国籍(DropDownList)
在第一个页面里面写的如下代码Default.asp.cs:
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        TextName.Text = "";
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Session["Iname"] = TextName.Text;
        if (RadioButton1.Checked == true)
            Session["Sex"] = "男";
        if (RadioButton2.Checked == true)
            Session["Sex"] = "女";
        Session["guojia"] = DropDownList1.Text;        
        Response.Redirect("Default2.aspx");
    }
}然后在第二个页面里面写的如下代码Default2.asp.cs:
public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {        
        Label1.Text = Session["Iname"].ToString();
        Label2.Text = Session["Sex"].ToString();        
        Label3.Text = Session["guojia"].ToString();
        Session.Remove("Iname");
        Session.Remove("Sex");
        Session.Remove("guojia");
    }
}运行的时候很奇怪,在单击了以后惟独姓名没传递过去,,?
我试了好多次,,不知道怎么搞的,就是过不去如果我是把页面切换到Default2.asp.cs点运行的话,会指向Label1.Text = Session["Iname"].ToString();弹出一个提示:
用户代码未处理NullReferenceException未将对象引用设置到对象的实例。如果我把这一句换个位置,放到第二行,也就是说第一句放:Label2.Text = Session["Sex"].ToString();        那么他就会针对这一句弹出相同的提示。。头大了。。对于高手来说,应该不算问题了吧。。别见笑,,,希望大家能帮我解决下。 。。感激不尽~另外,如果我在第二页加一个返回按纽,,应该怎么操作?

解决方案 »

  1.   

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                   TextName.Text = "";
        }
      

  2.   

    每次点按钮页面都刷新,都调用Page_Load,你每次点按钮赋值后又在Page_Load里面该成空了。用IsPostBack,如果第一次加载,该属性为false,如果是回传,为true。
      

  3.   

    如果我是把页面切换到Default2.asp.cs点运行的话,会指向Label1.Text = Session["Iname"].ToString();弹出一个提示:
    用户代码未处理NullReferenceException
    -----------------------------------------------------------------页面1不运行,Session还没有写入,当然为空。
      

  4.   

    楼上已经说了.
    另外不是特别重要的问题尽量不要用session
      

  5.   

    加一个返回的按纽<input type="button" value="返回" onclick="javascript:window.location.href='1.aspx'">
      

  6.   

    每次点按钮页面都刷新,都调用Page_Load,你每次点按钮赋值后又在Page_Load里面该成空了。用IsPostBack,如果第一次加载,该属性为false,如果是回传,为true。===================================我点了以后值不是应该传过去了么?点一次就传过去了啊
      

  7.   

    页面执行顺序:第一次请求:Page_Load点了按纽后:比如你输入了一个新值aaa此时又要执行Page_Load
    TextName.Text = ""; 此时才会执行  Button1_Click 所在TextName.Text已经不是aaa,已经清空了
    现在保存在session
    Session["Iname"] = TextName.Text; 这一句其实保存的是个空值.
      

  8.   

    即:Page_Load是每次与服务器交互都必须运行的事件,它与windows程序不同,windows程序只是窗体第一次加载时运行.其他事件不会再执行Page_Load.而web程序是一个基于http无状态协议的,它每请求一次都会新生成了一个
    Page类.
    只不过通过ViewState在一个类的不同实例间传值,
    造成了有事件的假象.
      

  9.   

    谢谢,,搞定了这个和BCB有些不同呢。。是在点按纽了先调用了Page_Load~多谢。。呵呵如果我要返回的话,,应该如何调用呢?cpp2017(慕白兄) 
    加一个返回的按纽<input type="button" value="返回" onclick="javascript:window.location.href='1.aspx'">-----------------------------:)~这个,,我还看不懂,,,这个,不是写在.cs里面的吧
      

  10.   

    Page_Load事件在每次页面传回去的时候都会执行虽然你只点了按钮的提交可是到服务器上还是要先执行Page_Load事件,然后才是按钮的点击事件所以如果你在 Page_Load 里面没做这个判断 if (!IsPostBack) 你的 TextName.Text = "";总会执行,你当然就得不到值了
      

  11.   

    Remove掉了,再刷新就该报错了,第一次加载的时候执行是正解
      

  12.   

    我点了以后值不是应该传过去了么?点一次就传过去了啊
    ---------------------------------------------------------
    response.redirect其实上是当服务器碰到这条语句时发送一条指令(包含新的地址)给浏览器,然后让浏览器去发送http请求,请求response.redirect后面的那个新的http地址
    因此每次点了后,还要执行这个函数
        protected void Page_Load(object sender, EventArgs e)
        {
            TextName.Text = "";
        }
    这也是3.0中为什么增加Server.Transfer的原因。
    所以要用IsPostBack判断。
      

  13.   

    要从页面控件获取值。。if(!Page.IspostBack)是必须的。不然获取的都是空值。
    的确最好还是不要太多依赖Session
      

  14.   

    这个,,我还看不懂,,,这个,不是写在.cs里面的吧=======
    直接写在aspx中./
      

  15.   

    <input type="button" value="返回" onclick="javascript:window.location.href='1.aspx'">-----------------------------:)~这个,,我还看不懂,,,这个,不是写在.cs里面的吧-------------------------------
    JS调用。直接在aspx控件的onclick事件触发
      

  16.   

    <input type="button" value="返回" onclick="javascript:window.history.back(-1);">