我有一个带有select属性的viewModel。该物业位于ko.validatedObservable({})
内。我正在使用不同的ko.validatedObservable()
部分分隔不同的视图。我的输入验证正常,除非select正在从页面加载验证,即使在init()
我有messagesOnModified: true
(因为我不想在首次加载页面时显示错误消息)。第一个选项有value=""
。我检查了标记并设置了data-orig-title="REQUIRED"
,而其他输入控件将此属性设置为""
,因为它应该是
有人可以指出为什么选择表现不同?我还要补充一点,我正在使用剃刀生成Select @Html.DropDownListFor(x=>x.dest_provincia, Model.Items, new { data_bind="dest_provincia"})
这是验证的样本
(在viewModel上)
self.dest_provincia = ko.observable().extend({ required: { message: "REQUIRED"} });
这放在里面:
self.userValidation = ko.validatedObservable({
rem_provincia: this.rem_provincia
)};
我注意到验证是在select上发生的,因为正在触发更改事件,但我不知道是什么使它...? 更新:我尝试通过在ajax调用中循环$ .each并在knoackout中填充observableArray来创建select by razor。在任何情况下,更改事件都是在页面加载时触发......!
答案 0 :(得分:2)
我今天设法解决了这个问题。
剃刀引擎模板化选择选项之间存在问题,然后将所选元素的值绑定到Knockout。
尽管选择框中没有用户输入的值,但默认值“--select--”实际上包含一个值。在我的情况下,它是一个空字符串。因此,当我应用knockout绑定时,我的viewmodel属性被“更新”了空字符串值,因此验证被激活。
为了解决这个问题,我将模型的默认值设置为空字符串。因此,当应用绑定时,在Knockout observable上没有触发valueHasMutated事件,因此没有验证。