我知道可以使用模型上的UIHint
attribute将编译时参数字典传递给动态过滤器控件。不幸的是,这还不够。
例如,请考虑以下模型:
public class Device
{
public string Unit {get; set;}
public string Name {get; set;}
}
“单位”是我们模型中的隔离属性。一个单位不会干扰另一个单位。同时,多个单元共存于同一台服务器中,并由不同的客户端访问,具有不同的需求。
理想情况下,我希望在单位具有特定值时加载不同的动态字段。
考虑我有两个单位的情况:
unit1 :不需要自定义。从DynamicData\FieldTemplates
文件夹
unit2 :位于“unit2”的客户端请求了另一种显示设备Name
的方式,因此我们为该单元创建了一个自定义文件夹并更改了那里有Text.ascx模板。
结构如下所示:
请注意,现在有两个“文本”字段模板。每当我操作的实例具有'unit2'作为Unit属性值时,想法是使用'unit2'文件夹中的那个。根FieldTemplates
文件夹中的控件现在可以作为回退机制,以便在给定单位值不存在文件夹和控件时。
这些文件夹将在部署项目并创建单元后创建,根据我的看法,这应该不是问题。原始项目中唯一存在的文件是“默认”模板。
最初我考虑过创建自己的FieldTemplateFactory
实现并将其附加到MetaModel
,但它似乎无法访问对象的实际实例,只有MetaColumn
}。之后,我决定查看DynamicField
和DynamicControl
控件是如何实现的,但找不到任何可以实现我想要的扩展点。
我见过人们something similar, but with entire page templates。通过使用自定义路由,可以实现这一目标。但就我而言,由于我们正在讨论字段模板,因此不适用。
还有另一种方法我应该接近这个吗?我可以以某种方式将模板加载的决定基于对象内的属性值吗?是否有其他一些可能更简单的策略来显示不同单位的不同模板?
答案 0 :(得分:0)
您可以通过路线而不是实时数据执行此操作,因为在绑定数据之前选择了字段模板。