【发布时间】:2014-04-10 16:07:17
【问题描述】:
我正在使用 knockout.js 填充下拉列表:
<select data-bind="options: AvailableUsers, optionsText: 'DisplayName', value: SelectedUser, optionsCaption: '-- Select a User --'" data-val="true" data-val-required="You must select a user." id="SelectedUser" name="SelectedUser"></select>
<span class="field-validation-valid" data-valmsg-for="SelectedUser" data-valmsg-replace="true"></span>
我正在将验证器注册到表单并在提交处理程序上调用它(我认为这与问题无关,因为正在执行验证):
$.validator.unobtrusive.parse("#UserProfileCreation");
$("#UserProfileCreation").data("validator").settings.submitHandler = mappedModel.save;
但是,当尝试提交页面时,它总是表现得好像下拉列表没有选择值。即使我通过控制台确认 SelectedUser 有一个值。我已经在其他页面中成功地为 textareas 做了同样的事情,如下所示:
<textarea style="width: 100%; height: 50px; min-height: 30px;" name="GroupReply" id="GroupReply" data-bind="value: GroupReply" data-val="true" data-val-required="You must enter a reply."></textarea><br/><span class="field-validation-valid" data-valmsg-for="GroupReply" data-valmsg-replace="true"></span>
而且效果很好。因此,我不确定下拉列表中缺少什么,但是无论我是否选择一个选项,它都会一直表现得像空白一样并显示验证错误消息。我错过了什么?
【问题讨论】:
-
我还没有确认这一点,这就是为什么我要添加评论而不是答案,但我相信验证正在寻找要设置为可用选项之一的值验证设置时,即在页面加载时,当没有可用选项时。通过不依赖 data-* 验证,而是稍后通过 JavaScript 应用该字段的规则(在淘汰赛呈现选项之后),我认为你会解决这个问题。
标签: asp.net-mvc knockout.js unobtrusive-validation