Postback not working, Pages not maintaining state

T

Tom wilson

This is a huge problem. I'm going insane. I've tried to solve this
elsewhere and no one can suggest how to make this work. To me, this
should be a very basic thing to do.

I have an asp.net application that is a survey acceptor. The site is
to display a page of survey questions and accept the responses. It
builds the entire page dynamically from SQL Server tables. The idea
is that when a person submits their responses, if there are validation
errors, to reload the page with the error text under the question
heading. I have this working. Sort of.

- There are 3 questions, all required. I load the page and answer the
first question only and hit submit.
- The error texts show up! But the question I selected (radio) isn't
selected anymore.
- I choose the first question again and hit submit. The question
remains selected but the errror texts are gone.

This goes back and forth with each click of the button; errors and
noselection, selection and no errors, errors and no selection,
selection and no errors. I'm not understanding something. Here's the
basic flow of the page:

Private Sub Page_Load
BuildPage()
End Sub

Private Sub BuildPage()
' Code to build the page from SQL Server tables.
' Creates controls, HTML elements, a submit button and a handler for
the button click.
' Also checks an array for errors and displays error text:

If Me.IsPostBack = True Then
ErrorString = CheckForError(Q.ID)
If ErrorString <> "" Then
AddLiteral(ErrorString)
End If
End If
' Question text is placed here
' Controls (ie. radios) are placed here
End Sub

Private Sub Submit_Click
' Checks for errors in the page; ie. a question has not been answered.
' Loads an array of question ID's and the errors associated

If ErrorCount > 0 then
PlaceHolder1.Controls.Clear()
BuildPage()
else
response.redirect("ThankYou.aspx")
end if

end sub

So this is how I see this:

- Load the page, build its content in Page_Load
- Fill out, Submit. The server gets the page and executes the button
click code.
- The code checks for errors. Assume there is one.
- Above, Errorcount > 0. It rebuilds the page by clearing the
Placeholder and re-adding the controls. Since this is postback, it
inserts the error texts as it builds and it gets sent back to the
client.

But that's not right somehow because although I do get the error texts
inserted, the selections I did make are cleared. When I hit submit on
this page, it comes back with my selections and no errors. I'm told
that if I build the page in Page_Init, the control states will be
maintained but they aren't.

Where is my thinking going askew?

If it helps to admit I'm a newbie to asp.net and am an idiot then
please, make that assumption. :)
 
R

Riki

Tom said:
This is a huge problem. I'm going insane. I've tried to solve this
elsewhere and no one can suggest how to make this work. To me, this
should be a very basic thing to do.

I have an asp.net application that is a survey acceptor. The site is
to display a page of survey questions and accept the responses. It
builds the entire page dynamically from SQL Server tables. The idea
is that when a person submits their responses, if there are validation
errors, to reload the page with the error text under the question
heading. I have this working. Sort of.

- There are 3 questions, all required. I load the page and answer the
first question only and hit submit.
- The error texts show up! But the question I selected (radio) isn't
selected anymore.
- I choose the first question again and hit submit. The question
remains selected but the errror texts are gone.

This goes back and forth with each click of the button; errors and
noselection, selection and no errors, errors and no selection,
selection and no errors. I'm not understanding something. Here's the
basic flow of the page:

Private Sub Page_Load
BuildPage()
End Sub

Private Sub BuildPage()
' Code to build the page from SQL Server tables.
' Creates controls, HTML elements, a submit button and a handler for
the button click.
' Also checks an array for errors and displays error text:

If Me.IsPostBack = True Then
ErrorString = CheckForError(Q.ID)
If ErrorString <> "" Then
AddLiteral(ErrorString)
End If
End If
' Question text is placed here
' Controls (ie. radios) are placed here
End Sub

I think the problem is that you add the literal
before you build the rest of the page.
This causes all controls on the rest of the page
to get another ID. Which causes postback to fail.
I suggest moving the If block to just before End Sub.
 
T

Tom wilson

That's it.

You're right, I'm clearing the placeholder and re-creating the
controls. I added an "AddError" routine that inserts my error texts
into the placeholder order rather than rebuilding the page from
scratch. I never would have thought of that, THANKS!!!! The page
works.

Tom
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,578
Members
45,052
Latest member
LucyCarper

Latest Threads

Top