是否可以扩展从服务器收到的Breeze元数据?

时间:2013-03-18 04:36:39

标签: breeze

想知道是否有人知道任何扩展或配置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可以在元数据中包含服务器实体上的数据注释属性中描述的信息,那么我认为Breeze可以自动将额外的库存验证器添加到客户端EntityType(例如,对于RegEx,Range,MinLength,等...)。这将涵盖大多数基本验证用例。或者,它还可以允许开发人员检查元数据并提取有用的信息,例如我们可以用来连接我们自己的自定义RegEx验证器的regEx字符串。

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

我正在努力避免在客户端上创建和注册一堆自定义验证器,这些似乎是Breeze自动处理的基本验证。

谢谢, 理查德

2 个答案:

答案 0 :(得分:0)

这是一个很好的问题。

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

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

答案 1 :(得分:0)

嗯,一年过去了。有关此主题的任何新闻?我完全同意RWHepburn在服务器端定义所有验证规则并在客户端轻松提供它将是一件完美的事情。这就是EF中的数据注释 - 使其更容易!