我正在定制验证消息.它使用messageTemplates属性工作正常.但是它使用%displayName%来呈现属性的名称,我无法找到如何覆盖此值?反正有吗?
jpc*_*der 13
我也想这样做,但我想使用我的EF模型中的[DisplayName]属性.在我找到一种我认为可以分享的方式后,我找不到任何有这样做的例子的人.
首先,我扩展了从BreezeController返回的元数据:
[HttpGet]
public string Metadata()
{
// Extend metadata with extra attributes
JObject metadata = JObject.Parse(contextProvider.Metadata());
string nameSpace = metadata["schema"]["namespace"].ToString();
foreach (var entityType in metadata["schema"]["entityType"])
{
string typeName = entityType["name"].ToString();
Type t = Type.GetType(nameSpace + "." + typeName);
foreach (var prop in t.GetProperties())
{
foreach (var attr in prop.CustomAttributes)
{
string name = attr.GetType().Name;
foreach (var p in entityType["property"])
{
if (prop.Name == p["name"].ToString()) {
if (attr.AttributeType.Name == "DisplayNameAttribute") {
DisplayNameAttribute a = (DisplayNameAttribute)Attribute.GetCustomAttribute(prop, typeof(DisplayNameAttribute));
p["displayName"] = a.DisplayName;
break;
}
}
}
}
}
}
return metadata.ToString();
}
Run Code Online (Sandbox Code Playgroud)
然后我在元数据加载后添加了一些小的javascript来从Breeze想要找到它们的扩充元数据中戳出显示名称.
manager.fetchMetadata().then(function (md) {
angular.forEach(md.schema.entityType, function (et) {
var etype = manager.metadataStore.getEntityType(et.name);
angular.forEach(et.property, function (p) {
var prop = etype.getProperty(p.name);
prop.displayName = p.displayName;
});
});
console.log("starting app");
angular.bootstrap($("#app"), ["app"]);
});
Run Code Online (Sandbox Code Playgroud)
我正在使用角度,所以如果你不是你可以忽略角度的东西,可能会得到这个想法.这似乎工作得很好.将其扩展到其他模型属性以及RegularExpression验证属性应该非常容易.我可能会继续努力.
仅供参考,其中一些代码没有经过优化,可能会被重构,有点漂亮,但我只是让它工作并认为我会分享.如果有人有任何更好的建议让我知道.希望Breeze将来允许以更受支持的方式扩展元数据.这似乎有点像黑客.
这不是很好的文档,但您可以在任何dataProperty上设置'displayName'属性,这将覆盖自动生成的显示名称,并将用于此属性的所有验证消息.所以
var custType = myEntityManager.metadataStore.getEntityType("Customer");
var dp = custType.getProperty("companyName");
dp.displayName = "My custom display name";
Run Code Online (Sandbox Code Playgroud)
另外,请参阅本页底部的"自定义消息模板":Breeze Validation
| 归档时间: |
|
| 查看次数: |
1277 次 |
| 最近记录: |