【问题标题】:Is it possible to extend Breeze Metadata received from the server?是否可以扩展从服务器接收到的 Breeze 元数据?
【发布时间】:2013-03-18 04:36:38
【问题描述】:

想知道是否有人知道任何扩展或配置 Breeze 的方法,以便服务器在实体元数据中返回附加信息?我想使用这些附加数据来协助验证。

假设我有一个像这样应用了一些数据注释的实体模型:

public class Person {    
    [RegularExpression(@"^$|^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?", 
      ErrorMessage="The Website address does not appear to be valid.")]
    public string Website { get; set; }

    [Required(ErrorMessage="The Name field is required."), 
      MaxLength(150, ErrorMessage = "The Name field cannot exceed 150 characters."), 
      MinLength(5, ErrorMessage = "The Name field must be at least 5 characters.")]
    public string Name { get; set; }
    //...
}

目前,Breeze 仅根据它收到的元数据连接 MaxLength 和 Required Validator,因为这是它开箱即用的全部支持。如果 Breeze 可以在元数据中包含服务器实体上的 Data Annotation Attributes 中描述的信息,我认为 Breeze 可以自动向客户端 EntityType 添加额外的库存验证器(例如,对于 RegEx、Range、MinLength、 ETC... )。这将涵盖大多数基本验证用例。或者,它还可以允许开发人员检查元数据并提取有用的信息,例如我们可以用来连接我们自己的自定义 RegEx 验证器的 regEx 字符串。

另外,有什么方法可以让 Breeze 在元数据中包含 ErrorMessage 验证属性的值,然后让微风客户端使用它而不是默认的 required 和 maxLength messageTemplates?这意味着您只需在服务器上的一个位置定义错误消息,而不必为每个实体自定义它。

我试图避免在客户端上创建和注册一堆自定义验证器,这些验证器看起来像是可以由 Breeze 自动处理的基本验证。

谢谢, 理查德

【问题讨论】:

    标签: breeze


    【解决方案1】:

    这是一个很好的问题。

    我们还没有很好地记录服务器如何序列化元数据,但这应该“很快就会实现”。但是,如果您查看通过网络传输的 json,您会注意到验证器仅按名称进行序列化。然后在客户端上注册的验证器(或验证器工厂)中查找此名称,然后将其添加到客户端元数据中。因此,想法是在客户端上使用唯一名称注册您的验证器“实现”,然后让服务器在从服务器发送元数据时引用此名称。

    希望一旦我们记录了如何创建您自己的服务器端元数据以发送到客户端后,这将在一周左右的时间内变得更加清晰。

    【讨论】:

    • 感谢您的指点。我今晚再看看这个。如果文档更新讨论了如何自定义元数据以添加可用于自动连接客户端验证器实现的其他属性(错误消息、regEx 模式、minLength 等),那就太好了。同时,我期待看到文档更新。
    【解决方案2】:

    嗯,一年过去了。有关于这个话题的消息吗?我完全同意 RWHepburn 的观点,即在服务器端定义所有验证规则并在客户端轻而易举地使用它是一件完美的事情。这就是 EF 中的数据注释的用途 - 使它更容易!

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多