Asp.net mvc 4 如何获得淘汰选择以使用value和valueOption

Asp.net mvc 4 如何获得淘汰选择以使用value和valueOption,asp.net-mvc-4,knockout.js,knockout-2.0,Asp.net Mvc 4,Knockout.js,Knockout 2.0,我需要我的select选项有一个值,因为我正在将表单发回服务器,asp.net mvc需要知道该值。如果我绑定并将“value”设置为一个对象的实例,我想这样做是因为其他绑定从所选对象的值中读取,那么这些选项没有html值属性。value属性是提交表单时所需的属性。如果我设置optionsValue并将其指向项的id,那么它将覆盖我的值绑定,并且我会得到错误,即对象没有绑定到的属性 <select data-bind=" options: $root.meetingEvents,

我需要我的select选项有一个值,因为我正在将表单发回服务器,asp.net mvc需要知道该值。如果我绑定并将“value”设置为一个对象的实例,我想这样做是因为其他绑定从所选对象的值中读取,那么这些选项没有html值属性。value属性是提交表单时所需的属性。如果我设置optionsValue并将其指向项的id,那么它将覆盖我的值绑定,并且我会得到错误,即对象没有绑定到的属性

<select data-bind=" options: $root.meetingEvents,
                    value: $data.meetingEvent,
                    optionsText: 'meetingEventName',
                    optionsValue: 'meetingEventId'
                    optionsCaption: ' '">
我可以在计算类型上设置读/写选项,但我想知道是否有更简单的方法

谢谢

期权没有价值

 <select data-bind="options: $root.meetingEvents,
                    value: $data.meetingEvent,
                    optionsText: 'meetingEventName',
                    optionsCaption: ' '">

选项有值,但选中时,会将meetingEventId推送到值中,因此没有其他属性,而我绑定了其他控件

<select data-bind=" options: $root.meetingEvents,
                    value: $data.meetingEvent,
                    optionsText: 'meetingEventName',
                    optionsValue: 'meetingEventId'
                    optionsCaption: ' '">

这是他们需要将此绑定功能添加到knockout的另一个重要原因。不应限制您在绑定到值对象或valueOption之间进行选择

你们已经列出了我可能会采用的计算可观察方法;使用optionsValue binding open,然后添加一个保持选定对象的计算可观测值


您还可以做一些更费力的事情,在表单submit上注册一个回调,然后动态插入该值,使其成为post的一部分…

最后,我添加了一个新的计算可观测值,当该值出现时,我从数组中找到该项,并在我的视图模型上手动设置它

<select data-bind=" options: $root.meetingEvents,
                    value: $data.meetingEventId,
                    optionsText: 'meetingEventName',
                    optionsValue: 'meetingEventId'
                    optionsCaption: ' '">

我会采取稍微不同的方法。将meetingEventId和meetingEvent属性保留为可观察的,但向meetingEventId添加订阅,以便在meetingEventId更改时更新meetingEvent

HTML

    <select data-bind=" options: $root.meetingEvents,
                value: $data.meetingEventId,
                optionsText: 'meetingEventName',
                optionsValue: 'meetingEventId'
                optionsCaption: ' '">
this.meetingEventId = ko.observable('');
this.meetingEvent = ko.observable(null);

this.meetingEventId.subscribe(function(){
    var meetingEventId = this.meetingEventId();
    var meetingEvent = ko.utils.arrayFirst(vm.meetingEvents(), function (item) {
        return meetingEventId === item.meetingEventId();
    });

    this.meetingEvent(meetingEvent);        
});