繁体   English   中英

MVC的无敲击验证使用dropout.js?

[英]MVC Unobtrusive validation for a dropdown using knockout.js?

我正在使用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>

并且我正在将验证器注册到表单并在submithandler上调用它(我认为这与问题无关,因为验证正在执行):

$.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>

而且效果很好。 因此,我不确定该下拉菜单缺少什么,但是无论是否选择一个选项,它始终表现为空白,并显示验证错误消息。 我想念什么?

我弄清楚了,它很简单,因为我对敲除如何处理下拉列表的选定值缺乏了解。

我在KO View模型中的AvailableUsers由基于C#MVC类(使用KO映射插件转换)的KeyValueModels列表组成:

public class KeyValueModel{
   public Guid Id {get; set;}
   public string DisplayName {get; set;}
}

我只需optionsValue: 'Id'下拉列表的data-bind属性添加optionsValue: 'Id' 但是应该注意,这仅行得通,因为我在操作参数中将Guid作为MVC视图模型的SelectedUser属性传递。

有时候,我想将下拉列表所代表的整个javascript对象传递给MVC视图模型,在这种情况下,这种解决方案将行不通。

请注意,在控制台中,如果您没有optionsValue: 'Id' ,则从下拉列表中选择一个选项,然后键入mappedModel.SelectedUser()您将获得:

Object {Id: "adb9ae2d-01c8-468d-96e6-06ec39039e29", DisplayName: "Johnson, John"}

因为敲除可以存储整个选定对象。 但是,剔除并不会为实际HTML标记的下拉菜单中的选项设置任何值,它们都是空的(这就是验证失败的原因)。

如果您确实添加optionsValue: 'Id'并在控制台中键入mappedModel.SelectedUser() ,那么您将简单地得到:

"adb9ae2d-01c8-468d-96e6-06ec39039e29"

出于我在此页面上的目的,这很好。 如前所述,如果您希望基于该选择将整个对象传递给MVC操作,则此设置将不起作用。 您可能需要执行一些操作,例如设置一个隐藏字段并将其值设置为SelectedUser().Id并将验证放在该隐藏字段上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM