我有一个与 ko.observableArray([]) 绑定的下拉列表。在这里,我在 vm.selectedUser 中捕获选定的值,这是一个 ko.observable()。我想将此值分配给 onchange 事件 @Html.HiddenFor(m => m.UserName, new {id="hiddenUser" }) 中的隐藏字段
$("#hiddenUser").val(vm.selectedUser);
请帮忙。谢谢
我有一个与 ko.observableArray([]) 绑定的下拉列表。在这里,我在 vm.selectedUser 中捕获选定的值,这是一个 ko.observable()。我想将此值分配给 onchange 事件 @Html.HiddenFor(m => m.UserName, new {id="hiddenUser" }) 中的隐藏字段
$("#hiddenUser").val(vm.selectedUser);
请帮忙。谢谢
不需要 jQuery 和订阅,只需将隐藏的输入直接绑定到 selectedUser 可观察对象:
@Html.HiddenFor(m => m.UserName, new {id="hiddenUser", data_bind="value: selectedUser" })
请注意,它是“data_bind”而不是“data-bind”。在 Razor 中,破折号是无效的名称字符,但它会自动将下划线转换为破折号。
[这不是广告的意思,但如果您有兴趣,这是我在 WintellectNOW dot com 上一起使用 Knockout 和 MVC 的视频中演示的项目之一。]
你可以订阅改变来做到这一点
vm.selectedUser.subscribe(function(newValue) {
$("#hiddenUser").val(newValue));
});
或者只是将隐藏字段绑定到您的可观察对象,这也应该有效
@Html.HiddenFor(m => m.UserName, new {id="hiddenUser",data_bind = "value: selectedUser" })
你可以做类似这个 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>