Validation 敲除验证在加载时立即进行评估

Validation 敲除验证在加载时立即进行评估,validation,knockout.js,knockout-validation,Validation,Knockout.js,Knockout Validation,我使用MVC、Knockout和Knockout验证来验证我的视图模型 我遇到了一个问题,视图模型属性的验证在加载时立即启动。换句话说,“此字段是必需的”在用户试图更改其值之前显示在我的输入旁边 下拉(选择)控件尤其会出现此问题 我猜这是我无意中更改/访问/变异javascript代码另一部分中的可观察对象造成的问题。然而,我不知道如何找到这个 有没有一种方法可以让我订阅或跟踪在淘汰验证中引发验证的偶数?我只想知道为什么会这样。我非常确信isValid()函数的值始终为false 以下是如何在页

我使用MVC、Knockout和Knockout验证来验证我的视图模型

我遇到了一个问题,视图模型属性的验证在加载时立即启动。换句话说,“此字段是必需的”在用户试图更改其值之前显示在我的输入旁边

下拉(选择)控件尤其会出现此问题

我猜这是我无意中更改/访问/变异javascript代码另一部分中的可观察对象造成的问题。然而,我不知道如何找到这个

有没有一种方法可以让我订阅或跟踪在淘汰验证中引发验证的偶数?我只想知道为什么会这样。我非常确信isValid()函数的值始终为false

以下是如何在页面加载时轻松设置my HTML的示例:

<select class="highlightable validationElement" name="obsstate" data-bind="value: standardAnswers.ans106_1.value" required="true">
    <option value="">-- Select -- </option>
        <option value="AK">AK</option>
        <option value="AL">AL</option>
        etc...

</select>

--选择--
AK
艾尔
等

我自己解决了这个问题

问题存在于razor引擎对select选项进行模板化,然后将所选元素的值绑定到Knockout之间

尽管选择框中没有用户输入的值,默认值--select--“实际上包含一个值。在我的例子中,它是一个空字符串。因此,当我应用敲除绑定时,我的viewmodel属性被“更新”为空字符串值,因此启动了验证

为了解决这个问题,我将模型的默认值设置为空字符串。因此,当应用绑定时,不会在可观察到的敲除事件上触发valueHasMutated事件,因此不会进行验证。

引用KO页。。。。()

KO将在项目列表的前面加上一个显示文本“选择项目…”且值未定义的项目。因此,如果myChosenValue持有未定义的值(默认情况下,可观察对象会这样做),那么将选择dummy选项。如果optionsCaption参数是可观察的,则初始项的文本将随着可观察值的更改而更新

因此,我在定义属性时通过设置“undefined”解决了这个问题,请参见下面的示例:

self.myProperty = ko.observable(undefined).extend({
    required :  {"Field Required"}
});

希望这对应用viewmodel绑定后的…

有所帮助。然后,对于该视图模型,将
showAllMessages
显示为
false

示例

YourViewmodelname.errors.showAllMessages(false);

我将模型设置为空字符串,但它仍在加载时启动。我注意到的一点是,optionsCaptions:'Select…'确实放在项目中,但值不是value=“”它只是选择了…在我的情况下非常有用的语法:
ko.validation.group(viewModel()).showAllMessages(false)
@JonathanStrate感谢您发布此消息-在我的示例中,viewmodel.errors未定义,并且您的版本工作正常。在ko.applyBindings(…)之后,对错误进行分组并调用方法:ko.validation.group(yourViewModel,{deep:true})。showAllMessages(false);