You should use a database, and depending on the complexity of your questionnaires will determine how "wild" you need to go into self-referencing structures and such. I'm assuming you'll be using a Relational DB.
1). Will the questions be unique per "questionaire" or re-used?
2). Will each answer only belong to one Question or re-used across questionnaires?
3). Will they ever want each answer to lead to a different "next" question?
Depending on the above will determine the "object" model, whether in code or as a database object.
Why use a database?
1). Because you'll be able to slap an admin tool on it at some point .
2). You can store the answers to the questions "relationally" to the questions.
Now for the "types" of answers: textboxes, inputs, radios, checkboxes etc..
You're going to have to store an answer "type" (textbox, radio, input) on each possible answer that is stored in the DB (or XML). like a lookup table, or some other defined value indicating the control type to render.
Then in the client code, you're going to have to "resolve" them on the display side of things using a switch, or dynamic control building mechanism.
Now the tricky part is going to be when a "list of options" is required, like for a drop down. You'll have to have an "Answer with Associated Answers" type of reference, so you can pull the associated answers and if type "dropdown". However, you'd probably be better off rendering the "drop down" type answers as a "radio" button list since they provide the same "choose one of a set" / multiple choice type capability.
Here's some general direction based on my experience:
you'll need Structures something like: "Questionaire", "Questions", "Answers", and a "UserAnswers". then maybe a "JoinQuestionaireToQuestions" and a "JoinQuestionsToAnswers" if you want to get all reusable / fancy.
Then you'll look up the Quetsionaire you need to use, get all the questions and the answers for each question. And render them on the page using the dynamic control rendering mechanism you created.
Then either as they complete the Questionaire you store each response in the DB, or save each answer in the client and do one insert after they complete the form. You just keep the value of the input or form field and save that data as the answer "value".
I put it under the URL: question commando , lol.. click on "discovery script" to start the Q and A. In my scenario, each answer can lead to a different question.
Anyhow, hope any of this helps...