我是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>
}
}


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

我可以在Question中保留单个值,Question是Model中的公共财产。但是我没有动态地做所有事情。

你能指导我怎么做吗?

最佳答案

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

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;

关于c# - 如何获得动态下拉列表选择的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21557274/

10-10 11:10