如果选择标题而不是值,则 Breeze/Knockout 下拉值不会在数据库中更新
Posted
技术标签:
【中文标题】如果选择标题而不是值,则 Breeze/Knockout 下拉值不会在数据库中更新【英文标题】:Breeze/Knockout dropdown value is not updated in database if caption is selected instead of value 【发布时间】:2016-02-06 00:21:11 【问题描述】:我在我的 .net 应用程序中使用 Breezejs 和 Durandal。
当我尝试编辑包含的部分时
1) 文本框
2) 带有标题和选项的下拉列表
3) 文本区域
4) 按钮
点击编辑按钮,我将这些控件与它们各自的值绑定(直到它工作正常)。
在我将文本框值更改为“test123”并将下拉值更改为“标题”并单击保存按钮后。在保存功能中,我正在创建修改状态的 Breeze 实体并更新它们,如下所示,
var personEntity = breeze.manager.createEntity('TableName', Id: id , breeze.EntityState.Unchanged);
personEntity.entityAspect.entityState.setModified();
personEntity.name(name); //"test123"
personEntity.dropdownValue(status) //I have selected the caption, means value is undefined
personEntity.textArea(address); //No change
然后将 savechanges() 保存到 DB。
表格文本框中的值已正确更新,但下拉列表的值未更新(来自某个值 为空);
请建议我一些解决方案,以便我可以在选择标题时将空值保存在数据库中。
提前致谢......
【问题讨论】:
尝试使用''
而不是null
。
您应该显示更多代码和 html 以了解何时调用保存更改、如何绑定属性等等。
如果您检查在 saveChanges 时发送到服务器的有效负载(例如,使用浏览器 F12 开发工具的“网络”选项卡),您是否看到正在发送的 dropdownValue?
@Steve.... 我在网络选项卡中检查了下拉值是 Null。但 Db 仍然没有按 Null 值更新。
@JotaBe...... -- ----------------- function TaskListViewModel() var self = this; self.status= ko.observable(); self.lastName = ko.observable(); self.statusArray = ko.observableArray([ Choices: "Alignment Complete", Choices: 'PQR' ]); self.saveData = function () //创建和更新实体 saveChanges('Message');
【参考方案1】:
问题是服务器上的ContextProvider
没有检测到dropdownValue
已更改。它通过查看entityAspect.originalValues
来确定更改的属性。由于您使用 dropdownValue = undefined 创建了一个新实体,并将其设置为 undefined,因此不会检测到任何更改。
更改您的代码以将 dropdownValue 初始化为其他内容:
var personEntity = breeze.manager.createEntity('TableName',
Id: id, dropdownValue: 'something' );
personEntity.name(name);
personEntity.dropdownValue(status);
personEntity.textArea(address);
【讨论】:
感谢您的回复......但在我的实体中总共有 10-15 个下拉菜单。在实体创建期间传递所有这些值是一种好习惯吗?你能建议一些其他的解决方案吗???以上是关于如果选择标题而不是值,则 Breeze/Knockout 下拉值不会在数据库中更新的主要内容,如果未能解决你的问题,请参考以下文章
使用 findOneAndUpdate() 时,如果没有提供值,如何保持字段不变(而不是用 null 覆盖)?