MVC3 DropDownList + JSON +选定的问题

时间:2012-07-07 01:19:17

标签: json asp.net-mvc-3 drop-down-menu selected

我的网站(MVC3 + JQuery)与其移动版本(MVC3 + JQuery mobile)之间存在一种非常奇怪的行为,它们分为两个不同的解决方案。

我使用以下代码根据另一个(SearchBy)更改下拉列表(SearchValue)。

剃刀:

@Html.DropDownListFor(x => x.SelectedSearch, new SelectList(Model.SearchBy, "key", "value"), new { onchange = "GetValues($(this).val());" })
@Html.DropDownListFor(m => m.SelectedSearchValue, new SelectList(Model.SearchValue, "key", "value"))

JSON:

$.ajax({
                    type: "POST",
                    url: '@Url.Action("GetValues", "Search")',
                    data: "{searchId:" + searchId + "}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (data) {
                        var options = $('#SelectedSearchValue');
                        $('option', options).remove(); // Remove previous

                        $.each(data, function () {
                            options.append($('<option/>').val(this.Id).text(this.Display));
                        });
                    }
                });

这个代码在我的网站(JQuery)上工作得非常好,但在我的移动网站(JQuery mobile)上却不是这样,它适用于Opera Mobile而不是FF或IE或Safari ...(我试过用户代理模拟移动设备)

正确设置SearchValue下拉列表的值,但在JSON调用结束时,所选值是先前选定的值(不在下拉列表的可能值中)。我不清楚所以我给你一个小例子:

我对SearchBy有以下可能性: - 名称 - 车

当我选择Name时,我想在SearchValue中显示类似“Name1”,“Name2”等的内容 当我选择Car时,我想在SearchValue中显示类似“Car1”,“Car2”等的内容

但是在我的移动网站上使用之前的代码时,当我将值“Name”更改为Car“时,下拉列表会正确地重新填充正确的值(”Car1“,”Car2“等),但所选的值是前一个(例如“Name1”),即使它不在下拉列表的可能值中。我也尝试手动选择第一个值,但没有任何反应:

$('option[value=' + myBeautifulValue + ']').attr('selected', 'selected');

你有想法解决我的问题吗?我做错了什么?

提前感谢您的帮助, 尼科

PS:抱歉我的英语很差

2 个答案:

答案 0 :(得分:3)

好的,我找到了解决方案。我必须刷新下拉列表,很奇怪! 像那样:

var myselect = $("#SelectedSearchValue"); 
myselect[0].selectedIndex = 0; 
myselect.selectmenu('refresh'); 

Source

答案 1 :(得分:1)

尝试使用jQuery的prop

$('option[value=' + myBeautifulValue + ']').prop('selected', true);

请参阅jQuery upgrade blog notes - 在元素上设置selected属性时,使用.prop来获取/设置值。