Если вы в конечном итоге получите скрытое поле для каждого поля / вопроса, имейте в виду, что это также увеличит полезную нагрузку, которую вы отправляете с (сам DOM) и отправляете на (переменные формы) сервер. Хотя это может быть неплохо для некоторых скрытых полей, я думаю, что через некоторое время оно станет довольно неуправляемым и неэффективным.
Сессия может быть хорошим решением здесь, так как вам не нужно дублировать ваши вопросы со скрытым полем. Недостатком является то, что вам нужно выполнять сетевой скачок (или читать из кэша в памяти) каждый раз, когда вы отправляете данные на сервер для повторной обработки сеанса.
Не зная много о вашей ситуации, думаю, я бы больше склонялся к идее сессии.
Другая мысль, которая у меня возникла, заключалась в том, чтобы использовать одно скрытое поле, но сохранить в нем сериализованную в JSON версию вашей модели и использовать JavaScript на клиенте для его обновления, а также использовать Json.NET на стороне сервера для чтения это и работа с этим. Опять же, это действительно зависит от размера данных и от того, что вы с ними делаете.
Надеюсь, это поможет. Удачи!
UPDATE
Основываясь на вопросе в комментарии, вот как вы можете использовать JSON для хранения и передачи данных ... Примечание: я скорее специалист по jQuery, поэтому я использую это вместо чистого JavaScript для демонстрации .
В JavaScript у вас есть переменная для хранения вашего объекта:
var questionJson = {};
Получив ответы на вопросы, вы добавите их в литерал объекта JavaScript:
$('.question').blur(function(e){
var questionName = $(this).attr('name'); //assume the field has an attribute name that is the question name identifier
questionJson[questionName] = $(this).val(); //this will build up your object literal with name/value pairs of questions/answers
});
Когда вы отправляете форму, присвойте литерал объекта скрытому полю в форме, прежде чем вы действительно отправите ...
$('#submitButton').click(function(e){
e.preventDefault();
$('#hiddenFieldOfQuestionAnswerData').val(JSON.stringify(questionJson));
$('#myQuestionAnswerForm').submit();
});
На стороне сервера извлеките скрытое поле из переменных формы и используйте Json.NET (или другой десериализатор Json) для десериализации строки JSON ...
string json = Request.Form["hiddenFieldOfQuestionAnswerData"];
QuestionAnswerModel qaData = JsonConvert.DeserializeObject<QuestionAnswerModel>(json);
//go do stuff....
Надеюсь, это поможет.