Javascript 剔除设置下拉值

Javascript 剔除设置下拉值,javascript,jquery,ajax,asp.net-mvc,knockout.js,Javascript,Jquery,Ajax,Asp.net Mvc,Knockout.js,我在layout.chtml中使用了knockout js的语言下拉列表 <select id="Language" class="styled-select" data-bind="value: Language,options: locale, value: selectedLocale, optionsText: 'name'"></select> var viewModel = this; viewModel.locale = [{ id: 1, na

我在layout.chtml中使用了knockout js的语言下拉列表

 <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);

var viewModel=此;
viewModel.locale=[{id:1,名称:'English'},{id:2,名称:'Spanish'}];
viewModel.selectedLocale=ko.observable(sessionStorage.culture);
viewModel.selectedLocaleValue=ko.computed(函数(){
sessionStorage.culture=viewModel.selectedLocale()&&viewModel.selectedLocale().id;
});
应用绑定(视图模型);
在运行应用程序时,我更改了下拉列表并选择了西班牙语,然后当我单击提交按钮时,页面被重新呈现,并再次使用默认英语重新设置区域性会话值

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

  • 重新渲染时,进行一些调整并设置下拉选择值,并应反映在区域性会话中
  • 从登录发布操作时避免重新呈现
  • 让阿贾克斯打电话来发帖

  • 我尝试了选项1,但我不知道如何在下拉列表中设置所选值。您在会话中仅存储所选区域设置的
    id
    ,但是您需要在
    selectedLocale
    中存储整个区域设置对象,以使下拉列表预选工作

    因此,您需要通过
    id
    查找存储的区域设置:

    var localeFromSession = ko.utils.arrayFirst(viewModel.locale, function(item) {
        return item.id == sessionStorage.culture;
    });
    
    并将其设置为所选的语言环境:

    viewModel.selectedLocale = ko.observable(localeFromSession);
    

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

    我建议您使用第三个选项,因为它会增加页面的用户体验,而且为什么您只想呈现整个页面来刷新页面上的一个组件。