Validation 在我的下拉列表don';行不通

Validation 在我的下拉列表don';行不通,validation,knockout.js,breeze,Validation,Knockout.js,Breeze,我使用durandal模板+breeze处理一个asp.net mvc项目 我想在视图上定义用于添加/编辑操作的验证逻辑 到目前为止,它适用于文本,即从数据库填充的下拉列表:当元素不包含任何数据时,由于敲除验证,元素被标记为红色 但它不适用于从简单列表填充的下拉列表。 填充列表的元素来自枚举: public class Transport { [Key] int id { get; set; } ... [Required] public EnumCate

我使用durandal模板+breeze处理一个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“input validation error”>>红色)


有人知道为什么对我的下拉列表的验证不起作用吗

谢谢。

当你说“清除下拉列表”时,如果只有三个选项,怎么可能不选择一个选项呢。您是否可以制作第一个下拉项“选择一个项目…”,这样您就知道始终会有一个项目。如果下拉索引为0,则显示红色错误消息

另一个选项是,如果selectedindex为0或itemcount为0,则显示红色错误消息

这有帮助吗?

当你说“清除下拉列表”时,如果只有三个选项,怎么可能不选择一个选项呢。您是否可以制作第一个下拉项“选择一个项目…”,这样您就知道始终会有一个项目。如果下拉索引为0,则显示红色错误消息

另一个选项是,如果selectedindex为0或itemcount为0,则显示红色错误消息


这有帮助吗?

最后,我在我的类别列表中添加了一个id为空的元素,使它工作起来:

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' }];
我不知道为什么,只是简单地添加了选项caption:“--Choose--”不适用于验证。我的意思是这个元素显示在我的下拉菜单中,但是验证过程不把它当作一个验证错误。
我必须明确地在我的列表中添加一个元素。然后,当在我的下拉列表中选择此元素时,它被标记为红色。

最后,我通过在我的类别列表中添加一个id为空的元素使其工作:

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' }];
我不知道为什么,只是简单地添加了选项caption:“--Choose--”不适用于验证。我的意思是这个元素显示在我的下拉菜单中,但是验证过程不把它当作一个验证错误。
我必须明确地在我的列表中添加一个元素。然后,当在我的下拉列表中选择此元素时,它被标记为红色。

也偶然发现了此元素,经过一些尝试和错误后,我发现以下内容:

验证失败,因为optionsCaption使用undefined作为值

您的模型显然使用了“”(在我的示例中为null) 自空!=不知怎么的,这一切都崩溃了

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

  • 在模型上,将值设置为undefined(在您的示例transport.category(undefined))并像以前一样使用选项caption
  • 自行添加自定义空selectItem并跳过选项Caption(您使用的解决方案)

  • 我也偶然发现了这一点,经过一些尝试和错误,我发现了以下几点:

    验证失败,因为optionsCaption使用undefined作为值

    您的模型显然使用了“”(在我的示例中为null) 自空!=不知怎么的,这一切都崩溃了

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

  • 在模型上,将值设置为undefined(在您的示例transport.category(undefined))并像以前一样使用选项caption
  • 自行添加自定义空selectItem并跳过选项Caption(您使用的解决方案)

  • 当我说“清除下拉列表”时,我应该说我选择了第一项,即“选择…”,因为我的选择中有一个“选项说明:…”。在我的解决方案中,如果我选择第一个元素(即“choose…”),该元素将不会被标记为红色,我不知道为什么?当我说“清除下拉列表”时,我应该说我选择了第一个项目,即“choose…”,因为我的select中有一个“OptionCaption:…”。在我的解决方案中,如果我选择了第一个元素(即“choose…”),该元素将不会被标记为红色,我不知道为什么?谢谢您提供的信息。非常有用。还有第三种方法:onlyIf。您可以将其添加到一个required中,然后检查是否有另一个可观察对象,如“isFormSubmitted===true”或类似的内容。有时候这比担心表单有多原始容易。谢谢你提供的信息。非常有用。还有第三种方法:onlyIf。您可以将其添加到一个required中,然后检查是否有另一个可观察对象,如“isFormSubmitted===true”或类似的内容。有时候,这比担心一种形式有多原始更容易。