2

我有一个带有选择属性的 viewModel。该属性放置在一个ko.validatedObservable({}). 我将不同的视图与不同的ko.validatedObservable()部分分开。我的输入验证正常,除了选择是从页面加载验证,即使init()我有messagesOnModified: true(因为我不想在第一次加载页面时显示错误消息)。第一个选项有value="". 我检查了标记并data-orig-title="REQUIRED"设置了,而其他输入控件将此属性设置""为应有的属性

有人可以指出为什么选择的行为不同吗?我还应该补充一点,我正在使用 razor 生成 Select@Html.DropDownListFor(x=>x.dest_provincia, Model.Items, new { data_bind="dest_provincia"}) 这是验证示例

(在视图模型上)

self.dest_provincia = ko.observable().extend({ required: { message: "REQUIRED"} });

这被放置在里面:

self.userValidation = ko.validatedObservable({
        rem_provincia: this.rem_provincia
)};

我注意到由于触发了更改事件,因此在 select 上进行了验证,但我不知道是什么原因造成的..?更新:我尝试通过 razor 创建选择,通过在 ajax 调用中循环 $.each 并在 knoackout 中填充 observableArray。在任何情况下,更改事件都会在页面加载时触发......!?

4

1 回答 1

2

我今天设法解决了这个问题。

剃刀引擎模板化选择选项,然后将选定元素的值绑定到 Knockout 之间存在问题。

尽管选择框中没有用户输入的值,但默认值“--select--”实际上包含一个值。就我而言,它是一个空字符串。因此,当我应用淘汰绑定时,我的 viewmodel 属性被“更新”为空字符串值,因此触发了验证。

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

于 2012-12-04T00:45:59.530 回答