淘汰赛设置下拉值

时间:2015-12-21 11:58:10

标签: javascript jquery ajax asp.net-mvc knockout.js

我使用knockout js在layout.chtml中有一个语言下拉列表

 <select id="Language" class="styled-select" data-bind="value: Language,options: locale, value: selectedLocale, optionsText: 'name'"></select>


 var viewModel = this;

 viewModel.locale = [{ id: 1, name: 'English' }, { id: 2, name: 'Spanish' }];

 viewModel.selectedLocale = ko.observable(sessionStorage.culture);
 viewModel.selectedLocaleValue = ko.computed(function () {
     sessionStorage.culture = viewModel.selectedLocale() && viewModel.selectedLocale().id;
});

ko.applyBindings(viewModel);

在运行应用程序时,我更改了下拉列表并选择了西班牙语然后当我单击提交按钮时,页面被重新渲染,并再次使用默认的英语设置文化会话值。

以下是解决问题的可能方法。

  1. 重新渲染时进行一些调整并设置下拉选择值,并应反映在文化会话中
  2. 避免在登录后发布行动时重新呈现
  3. 请Ajax致电发帖。
  4. 我已尝试过选项1但我不知道如何在下拉列表中设置所选值

1 个答案:

答案 0 :(得分:2)

您只在会话中存储所选语言环境的id,但是您需要将整个语言环境对象存储在selectedLocale中,以便进行下拉预选工作。

因此,您需要按id

查找存储的区域设置
var localeFromSession = ko.utils.arrayFirst(viewModel.locale, function(item) {
    return item.id == sessionStorage.culture;
});

并将其设置为selectedLocale

viewModel.selectedLocale = ko.observable(localeFromSession);

作为替代解决方案,您还可以在绑定中设置optionsValue: 'id'。在这种情况下,viewModel.selectedLocale将只包含id而不包含整个对象。但是,在这种情况下,您还需要更改保存代码,以及您希望选择完整区域设置对象的其他位置。