C# 如何基于运行时数据在动态数据中选择DynamicField模板?
我知道通过在模型上使用,可以将编译时参数字典传递给动态过滤器控件。不幸的是,在我们的情况下,这是不够的 例如,考虑这个模型:C# 如何基于运行时数据在动态数据中选择DynamicField模板?,c#,asp.net,webforms,metadata,asp.net-dynamic-data,C#,Asp.net,Webforms,Metadata,Asp.net Dynamic Data,我知道通过在模型上使用,可以将编译时参数字典传递给动态过滤器控件。不幸的是,在我们的情况下,这是不够的 例如,考虑这个模型: public class Device { public string Unit {get; set;} public string Name {get; set;} } 在我们的模型中,“单元”是一种隔离属性。一个单元不会干扰另一个单元。同时,多个单元共存于同一台服务器中,由不同的客户端访问,具有不同的需求 理想情况下,当单元具有特定值时,我希望加载不
public class Device
{
public string Unit {get; set;}
public string Name {get; set;}
}
在我们的模型中,“单元”是一种隔离属性。一个单元不会干扰另一个单元。同时,多个单元共存于同一台服务器中,由不同的客户端访问,具有不同的需求
理想情况下,当单元具有特定值时,我希望加载不同的动态字段
考虑我有两个单元的情况:
单元1:不需要定制。从DynamicData\FieldTemplates文件夹加载[默认]动态模板
unit2:unit2中的客户端请求以不同的方式显示设备名称,例如,因此我们为该设备创建一个自定义文件夹,并在其中更改Text.ascx模板
结构如下所示:
请注意,现在有两个“文本”字段模板。其思想是,每当我正在处理的实例的单位属性值为“unit2”时,就使用“unit2”文件夹中的一个。当给定单位值的文件夹和控件不存在时,根FieldTemplates文件夹中的控件现在将充当回退机制
这些文件夹将在项目部署和单元创建之后创建,从我所看到的情况来看,这根本不是问题。原始项目中唯一存在的文件是默认模板
最初我考虑创建自己的FieldTemplateFactory实现并将其附加到元模型,但它似乎无法访问对象的实际实例,只能访问元列。之后,我决定看看DynamicField和DynamicControl控件是如何实现的,但找不到任何可以实现我想要的功能的扩展点
我见过有人这样做。通过使用自定义路由,可以实现这一点。但在我的例子中,因为我们讨论的是字段模板,所以这不适用
我还有别的办法吗?我能否以某种方式根据对象内部属性的值来决定模板加载?是否有其他更简单的策略来为不同的单元显示不同的模板?您可以通过路由执行此操作,但不能通过实时数据,因为在绑定数据之前选择了字段模板