I actually ran in to this same problem earlier this week. What I ended up doing, successfully, was this:
My Model consists of a list of Questions, which is a custom class I wrote with the necessary properties needed for my scenario:
List<Question> Questions { get; set; }
My View uses a DropDownList inside of a foreach block as opposed to a DropDownListFor, and I am setting the name using the Id of each question:
@foreach (Question question in Model.Questions)
{
<li>@question.QuestionText</li>
<li>Answer: @Html.DropDownList(String.Format("ddlAnswer{0}", question.QuestionId), Model.Answers)</li>
}
On HttpPost on the Controller, I am passing in the FormCollection as a parameter to the Action and am again iterating through the results set. This would appear to be inefficient but tested in multiple scenarios it runs very quickly.
[HttpPost]
public ActionResult Index(SurveyModel model, FormCollection form)
{
foreach (Question question in model.Questions)
{
question.QuestionAnswer = form[String.Format("ddlAnswer{0}", question.QuestionId)];
}
}