Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何基于运行时数据在动态数据中选择DynamicField模板?_C#_Asp.net_Webforms_Metadata_Asp.net Dynamic Data - Fatal编程技术网

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控件是如何实现的,但找不到任何可以实现我想要的功能的扩展点

我见过有人这样做。通过使用自定义路由,可以实现这一点。但在我的例子中,因为我们讨论的是字段模板,所以这不适用


我还有别的办法吗?我能否以某种方式根据对象内部属性的值来决定模板加载?是否有其他更简单的策略来为不同的单元显示不同的模板?

您可以通过路由执行此操作,但不能通过实时数据,因为在绑定数据之前选择了字段模板