在我的下拉淘汰赛验证不工作(Knockout validation on my dropdown d

2019-08-18 09:02发布

我在与迪朗达尔模板+微风asp.net mvc的项目。

我想对我的看法定义的验证逻辑添加/编辑操作。

到目前为止,它适用于文本,从下拉列表填充数据库:当元素没有包含任何数据,则该元素被标记为红色感谢淘汰赛验证。

不过,这并不为下拉从简单的列表填充工作。

其中填充列表中的元素来自于一个枚举:

public class Transport
{
    [Key]
    int id { get; set; }
    ...
    [Required]
    public EnumCategory Category { get; set; }
}

public enum EnumCategory
{
    Cat1,
    Cat2,
    Cat3
}

第一个问题:我不知道是否有可能检索我的模型(服务器端)枚举使用它的客户端? 现在,我创建了一个数组的客户端来填充我的下拉列表:

var categories = [
    { id: 1, description: "Cat1" },
    { id: 2, description: "Cat2" },
    { id: 3, description: "Cat3" }];

问题二:我的显示视图时,如果类别下拉菜单中已经包含了一些数据,验证工作(我指的是场以红色标记,如果用户清除下拉列表)。 但是,如果类别下拉没”包含显示视图时,则下拉没有被标记为红色的任何数据。

我做什么,当验证失败时改变元素的背景颜色,如果没有有效的(感谢CSS“输入验证错误” >>红色)。

<select data-bind="options: $root.categories,
                   optionsText: 'description',
                   optionsValue: 'id',
                   optionsCaption: 'Choose...',
                   value: category,
                   validationOptions: { errorElementClass: 'input-validation-error' },
                   valueUpdate: 'afterkeydown'">
</select>

有谁知道为什么我的下拉验证didin't工作?

谢谢。

Answer 1:

只是偶然进入这个也和一些试验和错误之后,我发现以下几点:

验证打破了,因为optionsCaption使用未定义的值。

您的模型显然是使用“”(在我的情况下,它为空),因为空!=莫名其妙不确定这一切发生故障。

知道了这一点,有两种解决方案:

  1. 在模型的值设置为未定义(在你的榜样transport.category(不确定)),并利用optionsCaption像你已经习惯了
  2. 添加自定义空的SelectItem自己和跳过optionsCaption(您使用的解决方案)


Answer 2:

当你说“清除下拉”,怎么能一个选项而不是当只有三个选择采摘。 你可以做第一个下拉项“选择项目......”,让你知道总会有一个项目。 如果下拉指数为0,则表明你的红色的错误消息。

另一种选择是,以显示红色错误消息,如果将selectedIndex是0或ITEMCOUNT是0。

这是否帮助?



Answer 3:

最后,我把它加在我的类别列表为空号元素的工作:

var categories = [
    { id: '', description: '--Choose--' },
    { id: 1, description: 'Non classé' },
    { id: 2, description: 'Non nucléaire' },
    { id: 3, description: 'Classe II irradié' },
    { id: 4, description: 'Classe III' }];

我不知道为什么,但简单地增加optionsCaption:“请选择 - ”不为验证工作。 我的意思是此元素显示在我的下拉,但验证过程不会认为这是一个验证错误。

我明确地不得不元素添加到我的名单。 然后,当我在下拉列表中选择该元素被标记为红色。



文章来源: Knockout validation on my dropdown don't work