0

我有一个与 ko.observableArray([]) 绑定的下拉列表。在这里,我在 vm.selectedUser 中捕获选定的值,这是一个 ko.observable()。我想将此值分配给 onchange 事件 @Html.HiddenFor(m => m.UserName, new {id="hiddenUser" }) 中的隐藏字段

$("#hiddenUser").val(vm.selectedUser);

请帮忙。谢谢

4

3 回答 3

0

不需要 jQuery 和订阅,只需将隐藏的输入直接绑定到 selectedUser 可观察对象:

@Html.HiddenFor(m => m.UserName, new {id="hiddenUser", data_bind="value: selectedUser" })

请注意,它是“data_bind”而不是“data-bind”。在 Razor 中,破折号是无效的名称字符,但它会自动将下划线转换为破折号。

[这不是广告的意思,但如果您有兴趣,这是我在 WintellectNOW dot com 上一起使用 Knockout 和 MVC 的视频中演示的项目之一。]

于 2013-10-14T12:17:07.433 回答
0

你可以订阅改变来做到这一点

vm.selectedUser.subscribe(function(newValue) {
    $("#hiddenUser").val(newValue));
});

或者只是将隐藏字段绑定到您的可观察对象,这也应该有效

@Html.HiddenFor(m => m.UserName, new {id="hiddenUser",data_bind = "value: selectedUser" })
于 2013-10-13T14:24:24.310 回答
0

你可以做类似这个 DEMO的事情(我用我自己的编码风格创建了我的小提琴,可能与你的匹配也可能不匹配,抱歉!)

假设,

var Users = ko.observableArray([]);//Your User List
var SelectedUser=ko.observable();//Your Dropdown selected Item, can be ID or Name.

您可以编写/定义下拉更改事件的函数:-

function selectionChanged(data){
console.log(SelectedUser());
    $('#hiddenUser').val(SelectedUser());//Displaying it in Textbox
            $('#hiddenUser2').val(SelectedUser());//Saving it in hidden field

};

我的 HTML 标记如下:-

<select data-bind="options: Users, optionsText: 'Name', optionsValue: 'Id',value: SelectedUser,event: { change: selectionChanged }"></select>

<input type="text" id="hiddenUser"></input>
<input type="hidden" id="hiddenUser2"></input>

您还可以查看RP Niemeyer 的 Fiddle Example

于 2013-10-13T15:45:33.237 回答