在MVC中,我有一个多选下拉列表。在更改事件中,我正在填充另一个下拉列表,但无法在下面的控制器上获得多选值是我的代码。

视图

@Html.DropDownList("Country", ViewData["country"] as List<SelectListItem>, new {@multiple="multiple", style = "width:250px", @class = "dropdown1" })


阿贾克斯电话

<script type="text/javascript">
$(document).ready(function () {

    $("#Country").change(function () {

        var abc = $("#Country").val();
        alert(abc);


        $("#State").empty();
        $.ajax({
            type: 'POST',
            url: '@Url.Action("GetStates")', // we are calling json method
            dataType: 'json',
            //data: { id: $("#Country").val() },
            data: { "CountryId": abc },
            cache: false,
            success: function (states) {
                // states contains the JSON formatted list
                // of states passed from the controller
                $.each(states, function (i, state) {

                    alert(state.Value);
                    $("#State").append('<option value="' + state.Value + '">' + state.Text + '</option>');
                }); // here we are adding option for States
            },
            error: function (ex) {
                alert('Failed to retrieve states.' + ex);
            }
        });
        return false;
    })
});




控制者

public JsonResult GetStates(string CountryId)
   {
      return null;
   }


但是我只针对正常下拉菜单将多选择下拉列表的CountryId设为NULL,我得到了值。

是否有解决方法?

最佳答案

您生成的<select multiple="multiple">将回发值数组,而不是单个值。

因为您是在请求中发送数组,所以需要添加traditional: true ajax选项

$.ajax({
    type: 'POST',
    url: '@Url.Action("GetStates")',
    dataType: 'json',
    data: { countryId: $("#Country").val() },
    traditional: true,
    ....


然后更改控制器方法以接受数组

public JsonResult GetStates(string[] CountryId) // or IEnumerable<string> CountryId


注意,这是可行的,因为如果是一个简单的数组,但是在可能要回发一个复杂对象的数组的情况下,则需要使用contentType: 'application/json; charset=utf-8'选项,并且还需要使用JSON.stringify({ someProperty: yourComplexArray });对数据进行字符串化

边注;创建<select multiple>的正确方法是使用@Html.ListBoxFor()方法,该方法会添加multiple="multiple" attribute. In this case, it will work, but in other cases, for example, using DropDownListFor()in a loop to create a`,它将无法正确绑定,因此,我建议您使用正确的方法。

关于jquery - MVC中的空值多选级联下拉菜单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37389794/

10-16 04:41