如果最初的时候with绑定的对象是空的,那么with绑定内部的unobtrusive validation规则在提交的时候无法生效,无法进行验证。
解决办法:
在提交的时候(或者with绑定的对象非空值以后),先清除form对象的'validation'的data:
$.removeData($form[0], 'validator');
然后调用unobtrusive validation的parse函数重新对form内的控件进行解析。
$.validator.unobtrusive.parse($form[0]);
再调用valid()函数就可以正常验证了。
with绑定的对象为空的时候,还会导致form内button(或其他控件)的jquery的事件处理代码不能正常触发。需要把button移动到with绑定范围之外。
knockoutjs 对with 的说明:
If the expression you supply evaluates to null
or undefined
, descendant elements will not be bound at all, but will instead be removed from the document.
If the expression you supply involves any observable values, the expression will be re-evaluated whenever any of those observables change. Then, descendant elements will be cleared out, and a new copy of the markup will be added to your document and bound in the context of the new evaluation result.