• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 812
  • Last Modified:

Response.Flush();

why when i run or step trough this code, the html added to the page does not show at the moment of  Thread.Sleep?  thank you.

            placeholder.Controls.Clear();

                  string HTML = "";
                  HTML = "<table><tr><td>test</td></tr></table>";
            
                  Control objControl = this.Page.ParseControl(HTML);
                  this.placeholder.Controls.Add(objControl);


                  //Response.Clear();
                  Response.Buffer= true;
                  Response.Flush();
                  this.placeholder.Visible = true;
                  Thread.Sleep(15000);
0
alain123
Asked:
alain123
  • 3
  • 3
  • 3
  • +1
2 Solutions
 
monosodiumgCommented:
I think it's because you have flushed BEFORE you set the placeholder to visible. If it's not visible, it may not generate any HTML.
I'm assuming this is after PreRender. In it's before PreREnder, then it won't have gotten round to generating the HTML.
0
 
alain123Author Commented:
hello, i'm doing this after InOnit() ... before pre-render.. i tried to change the this.placeholder.Visible = true; before flush(), but nothing.. still the same form..
0
 
monosodiumgCommented:
Then you are nto going to see any HTML in the output because none has been generated. yet.
Why are you flushing in OnInit? At that stage you have pretty much nothing to flush.

0
Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

 
alain123Author Commented:
no I'm not flushing inside OnInit().. but After.. I'm flushing inside a Button_Onclick() event  that it's called after OnInit()... and

"Then you are nto going to see any HTML in the output because none has been generated. yet" ..I'm adding the html to the control .. i think it should  be there, unless i'm not doind some kind of refreshing..

               HTML = "<table><tr><td>test</td></tr></table>";
         
               Control objControl = this.Page.ParseControl(HTML);
               this.placeholder.Controls.Add(objControl);
0
 
monosodiumgCommented:
Sorry alain, I've had very littel exposure to the finer points of using controls so I can't help.
0
 
alain123Author Commented:
Thank you mon, for your help, i appreaciate it.
0
 
ptmcompCommented:
Before the render method no html will be written to the output stream therefore Response.Flush() does not change anything. Response.Buffer should be changed in the beginning of the pages lifecycle so that either all contents or nothing is buffered.
0
 
ptmcompCommented:
Place this code in OnPreRender:

              placeholder.Controls.Clear();

               string HTML = "";
               HTML = "<table><tr><td>test</td></tr></table>";
         
               Control objControl = this.Page.ParseControl(HTML);
               this.placeholder.Controls.Add(objControl);
               Response.Buffer= true;

Place this code in the overriden Render method:

               this.placeholder.Visible = true;
               Response.Flush();
               Thread.Sleep(15000);
0
 
ptmcompCommented:
Argh! The Visible property needs also to be set in the prerender method - else Render() will not produce any html.
0
 
AdrianJMartinCommented:
this works and you see the page 'filling up", it seams the Reponse object does not recognise the setting of Buffer to true until it has flushed the response automatically, I just pushed 300 spaces onto the stream as a test and it works.

            private void Button1_Click(object sender, System.EventArgs e)
            {
                  Response.Buffer= true;

//                  Response.Write( "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789<br>" );
                  Response.Write( "                                                                                                        " );
                  Response.Write( "                                                                                                        " );
                  Response.Write( "                                                                                                        " );

                  Response.Flush();


                  Response.Write("test2");
                  for( int i = 0  ; i < 100 ; i ++ )
                  {
                        
                        Response.Write( string.Format("Message {0}<br>" , i ) ) ;
                        Response.Flush();
                        System.Threading.Thread.Sleep(100);
                  }
            }
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

  • 3
  • 3
  • 3
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now