请看下面这个程序: public partial class _Default : System.Web.UI.Page 

   private string postedString; //接收 html控件myText传来的值     protected void Page_Load(object sender, EventArgs e) 
     {        if (!IsPostBack) 
          { 
          try 
           { 
            postedString = Request.Form["myText"].ToString(); 
           } 
          } 
     } protected void Button1_Click(object sender, EventArgs e) 

StreamWriter sw = new StreamWriter(@"d:\text.txt" ); 
sw.WriteLine( postedString ); 
sw.Flush(); 
sw.Close(); 
} Page_Load方法在页面加载时执行了语句 
postedString = Request.Form["myText"].ToString(); 假设我在myText控件中输入“hello”,那么postedString=“hello”,但是 Button1_Click事件执行后,text.txt内容却是空的!也就是说没有将 postedString的值写入文件,why??我测试了一下,Page_Load方法中的postedString 的确得到了“hello”这个值,可是为什么text.txt内容是空的??

解决方案 »

  1.   

    StreamWriter sw = new StreamWriter(@"d:\text.txt" ); 
    sw.WriteLine( postedString ); 
    sw.Flush(); 
    sw.Close(); 
    是不是流用错了?I/O我不太熟,用过,觉得使用的步骤挺多,你查看一下StreamWriter的使用方法与步骤。我觉得是这里错了。
      

  2.   

    因为回发了
    protected void Button1_Click(object sender, EventArgs e) 

    StreamWriter sw = new StreamWriter(@"d:\text.txt" ); 
    sw.WriteLine( Request.QueryString["myText"]); 
    sw.Flush(); 
    sw.Close(); 
      

  3.   

    你点按钮后,代码要重新从上往下执行(也就是刷新了一遍),你在private string postedString; //接收 html控件myText传来的值 
    处设置一个断点你会发现又重新执行了,这时就是空的了。
      

  4.   

    因为回发了 
    protected void Button1_Click(object sender, EventArgs e) 

    StreamWriter sw = new StreamWriter(@"d:\text.txt" ); 
    sw.WriteLine( Request.QueryString["myText"]); 
    sw.Flush(); 
    sw.Close(); 

    我赞成这个楼主的说法。
      

  5.   

    我是提问的楼主,有的人说“因为回发了”,什么意思?我又试验了一下原来的代码,我在aspx文件中加入了一个 TextArea控件,且runat=server
    protected void Page_Load(object sender, EventArgs e) 
        { 
          if (!IsPostBack) 
              { 
              try 
              { 
                postedString = Request.Form["myText"].ToString(); 
                TextArea1.Value = postedString;          
              } 
        } 然后把 button_click方法中的 sw.WriteLine( postedString );改成sw.WriteLine( TextArea1.Value );  这样,就能正常的向文件输出数据了,这是为什么?
      

  6.   

    因为只有第一次访问页面时IsPostBack为false,点击button的请求IsPostBack为true,造成postedString没有初始化。
    如果想要值在页面刷新时不被清空,要用ViewState,比如TextArea1.Value就是通过ViewState保存的。
    google一下IsPostBack和ViewState吧
      

  7.   

    阿丹:
     感谢你的回答,不过我不太明白啊,当page_load第一次调用时,IsPostBack=false,此时会执行if语句段的,
    if (!IsPostBack) 
              { 
              try 
              { 
                postedString = Request.Form["myText"].ToString(); 
              } 
              } 
    所以,postedString 应该被赋值了才对,我再点击button,这时候的postedString应该有值啊,怎么会是空呢?
      

  8.   


    因为postedString是_Default类的成员变量,而每次request都会生成一个新的_Default,你在上一个_Default对象中赋的值当然不能带到下一个_Default对象了,这样能明白?