如何获取mvc中提交操作的所有ListBox项(不仅仅是选定的项)

时间:2011-02-11 05:48:33

标签: c# asp.net-mvc

我如何在ListBox项目中的提交操作中获取所有asp.net mvc2值(不仅仅是选定的项目)。

我正在使用像

这样的Ajax表单
Ajax.BeginForm("actionname", new....)

只有当我选择列表框中的所有项目时,我才能获得列表框中的所有项目。

是否仍然可以在操作页面的lisbox中获取所有项目,而不仅仅是选定的项目

2 个答案:

答案 0 :(得分:4)

这并不像你想象的那么容易,因为从html的角度来看,只有在下拉列表中选择的值是在提交时发送给服务器的值。

但是,如果您可以使用jquery将数据作为json发送,则可以序列化列表框并将其与模型一起发送到操作。

一种方法是这样的:

想象一下,在任何给定的控制器中都有以下Action

public ActionResult MyAction(string myDropDown, string myDropDownValues)

您有这个要提交的Ajax表单

@using (Ajax.BeginForm("MyAction", new AjaxOptions()))
{ 
    @Html.Hidden("myDropDownValues")
    <select name="myDropDown" id="myDropDown">
        <option value="0">First</option>
        <option value="1">Second</option>
        <option value="2">Third</option>
        <option value="3">Fourth</option>
        <option value="4">Fifth</option>
    </select>
    <input type="submit" id="submit" />
}

您现在要做的是挂钩表单上的提交事件:$('form').submit(function(){});

如果页面上有多个表单,则应该使用更好的选择器。在此提交事件中,您可以使用.each()方法遍历下拉列表,然后在其中组合json。

创建json之后,您可以将其添加到隐藏字段,以便在服务器端更容易处理。

最终可能看起来像这样:

<script>
    $(document).ready(function () {
        $('form').submit(function () {
            var json = "";
            $("#myDropDown option").each(function () {
                value = $(this).val()
                text = $(this).html()

                if (json.length != 0) json += ",";

                json += value + ":" + text;
            });

            $('#myDropDownValues').val(json.toString());
        });
    });
</script>

当我现在提交表单时,字符串myDropDownValues具有以下内容:

0:First,1:Second,2:Third,3:Fourth,4:Fifth

答案 1 :(得分:0)

试试这个

for (int i = 0; i < listBox1.Items.Count; i++) {
    listBox1.SelectedIndex = i;
    MessageBox.Show(listBox1.SelectedItem.ToString());
}