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

标签 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>  
}
}

这里的问题是我无法获得某种方法来管理所有下拉列表的选定值并将它们传递给 Controller ​​。

我能够在 Question 中保留单个值,这是模型中的公共(public)属性。但我不知道如何为所有动态做。

你能指导我如何做吗?

最佳答案

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

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 循环中使用索引和问题的计数。重要的一点是模型绑定(bind)器如何使用 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

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

相关文章:

c# - 不必要的接口(interface)转换?

c# - 如何实现 TcpClient、IPEndPoint、IPAddress 对象的实例化,当作为字符串传递时,为这两种情况实例化 IPv4 和 IPv6 地址

c# - 覆盖基类中定义的属性

asp.net-mvc - asp.net mvc 区域默认页面

c# - 从非 Controller 类调用 Controller 操作

c#,如何读取xml内部元素

c# - 从现有数据库向 DbContext 添加表?

使用自定义验证器进行 ASP.Net 字数统计

c# - 如何从 SqlDataReader 返回单个值?

asp.net-mvc - 仅显示第一条错误消息