2

想知道是否有人知道扩展或配置 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 自动处理的基本验证。

谢谢,理查德

4

2 回答 2

0

这是一个很好的问题。

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

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

于 2013-03-18T16:15:25.560 回答
0

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

于 2014-05-22T09:38:54.423 回答