在我的剃刀观点中,使用knockout http://knockoutjs.com据说敲除验证 https://github.com/ericmbarnard/Knockout-Validation我添加以下行(以实际开始使用 ko 验证):
<script src="@Url.Content("~/Scripts/knockout.validation.debug.js")" type="text/javascript"></script>
- 当我在 Chrome 中运行此视图时,验证工作正常。
- 当我在 IE (9.0) 中运行此视图时,我收到非常难看的消息,内容如下:
0x800a138f - Microsoft JScript 运行时错误:无法获取属性“rules”的值:对象为 null 或未定义。
(在未来搜索的文本中)点击“继续”后,它运行良好,并且验证似乎运行良好。只是这条消息。
值得一提的是,我搜索了解决方案 - 我没有在任何地方使用“规则”。
不知道IE是怎么回事。
有谁知道为什么会发生以及如何消除错误?
简短回答:看起来像新版本的淘汰赛验证 https://raw.github.com/ericmbarnard/Knockout-Validation/master/Dist/knockout.validation.js解决这个问题。更新您的淘汰赛验证以解决此问题并忘记曾经发生过的情况。
更长的答案:该错误来自称为的内部实用程序方法中的错误isValidatable
。这是从源复制粘贴的:
isValidatable: function (o) {
return o.rules && o.isValid && o.isModified;
}
有人打电话isValidatable
where o
正如错误所述,是“空或未定义”。如果一个对象甚至不是一个对象,那么它就不可验证!在这种情况下我们遇到了错误,因为我们正在寻找o.rules
,这会抛出一个错误,因为o
未定义或为空。
新版本的淘汰赛验证 https://github.com/ericmbarnard/Knockout-Validation/blob/master/Dist/knockout.validation.js做这个:
isValidatable: function (o) {
return o && o.rules && o.isValid && o.isModified;
},
第一个子句返回 true (从技术上讲,它返回o
,如果对象存在,则计算结果为 true)。如果物体doesn't存在,如果存在,则返回无错误o
未定义。
如果你好奇,这是修复您遇到的错误的提交 https://github.com/ericmbarnard/Knockout-Validation/commit/a54ad5038589237fe0d64dc8e43e5d710e46df85.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)