如何获取动态下拉列表选择的值

时间:2014-02-04 16:00:38

标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我是MVC新手并使用MVC4进行项目。

以下是视图中的一段代码 -

@model SomeModel

@{
for (var i = 0; i < Model.NumberOfQuestions; i++)
{

<div class="ques">
    <div class="leftCol">
        <label>@Resources.Enroll.Question</label>
    </div>
    <div class="rightCol">
        @Html.DropDownListFor(m => m.Question, Model.Questions, new { id = "ddlQuestion" + i, @data_native_menu = "false", onchange = "SelectedIndexChanged(id)" })

        @Html.ValidationMessageFor(m => m.Question)
    </div>

    <div class="clear" />
    <div id="@("customQuestion" + i)" class="hide">
        <div class="leftCol">
            <label>@Resources.Enroll.CustomQuestion</label>
        </div>
        <div class="rightCol">
            @Html.TextBoxFor(m => m.CustomQuestion, new { id = "txtCustomQues" + i })
            @Html.ValidationMessageFor(m => m.CustomQuestion)
        </div>
    </div>
    <div class="clear" />
    <div class="leftCol">
        <label>@Resources.Enroll.Answer</label>
    </div>
    <div class="rightCol">
        @Html.TextBoxFor(m => m.Answer, new { id = "txtAnswer" + i })
        @Html.ValidationMessageFor(m => m.Answer)
    </div>

    <div class="clear" />
</div>  
}
}

这里的 问题 是我无法通过某种方式管理所有下拉列表的选定值并将其传递给控制器​​。

我能够在 问题 中保留单个值,这是Model中的公共属性。但我没有动态地为所有人做这件事。

你能指导我怎么做吗?

1 个答案:

答案 0 :(得分:1)

创建一个代表您要选择的问题的视图模型,即

public class QuestionViewModel
{
    public string QuestionId { get; set; }
}

然后将它们添加到现有模型中,而不会看到它当前的模型,它应该类似于:

public class QuestionsViewModel
        {
            public QuestionsViewModel()
            {
                SelectedQuestions = new List<QuestionViewModel>();
            }
            public List<SelectListItem> QuestionsSelectList { get; set; }
            public List<QuestionViewModel> SelectedQuestions { get; set; }
        }

在for循环中使用索引与问题的计数。重要的一点是模型绑定器如何使用QuestionId将其发送回帖子中:

@for(var i = 0; i < Model.SelectedQuestions.Count; i++)
{
    @Html.DropDownListFor(m => m.SelectedQuestions[i].QuestionId, Model.QuestionsSelectList as List<SelectListItem>, "Select..", new { @data_native_menu = "false", onchange = "SelectedIndexChanged(id)" })
}

提交表格时,您将收到一些选定的问题,即

var selectedQuestion1 = model.SelectedQuestions[0].QuestionId;

Selected Questions