【问题标题】:How to change order of dynamic filter controls?如何更改动态过滤器控件的顺序?
【发布时间】:2026-01-27 16:00:01
【问题描述】:

我有一个 ASP.NET 动态数据站点,它有多个使用元数据构建的过滤器控件,例如:

[ScaffoldTable(true), MetadataType(typeof(Fees.Metadata))]
public partial class Fees
{
    public class Metadata
    {
        [FilterUIHint("DateRange")]
        public object InvoiceDate;
    }
{

如何以特定方式订购这些过滤器。看起来很随意。我可以使用元数据属性还是应该修改页面模板,这是怎么回事?

【问题讨论】:

    标签: c# asp.net .net dynamic-data asp.net-dynamic-data


    【解决方案1】:

    好的,所以我最终只是手动重新排序自定义代码隐藏页面上的控件列表,如下所示:

    Control date_filter = FilterRepeater.Controls[1];
    FilterRepeater.Controls.RemoveAt(1);
    FilterRepeater.Controls.Add(date_filter); 
    

    在页面上的 3 个控件中,这会将第 2 个控件取出并将其添加到末尾。

    如果我需要再次使用,我可能会创建一个方法并搜索控件名称。

    这是一个粗略的解决方案,但它适合我这个临时场景。如果有人找到更好的方法,请告诉我。


    好的更好的方法:

    1. 安装这个:http://nuget.org/packages/NotAClue.DynamicData.Extensions
    2. 添加参考“使用 NotAClue.ComponentModel.DataAnnotations;”如果您使用的是单独的实体页面
    3. 将 [Filter(Order=1)] 元数据标签添加到属性

    【讨论】:

    • 感谢您的 NotAClue 说明,这对您有很大帮助。
    【解决方案2】:

    最后还是很简单的。我有四个过滤器,现在它们以正确的顺序出现......你需要做的就是在类元数据定义中添加一个 Display/Order 指令,例如:其中“n”是出现的顺序。

    在我使用的元数据定义中(VB - 所以你需要将它转换为你的场景)..

    我的文件名:OpCoProductRev.vb

    <MetadataType(GetType(OpCoProductRevMetadata))>
    Partial Public Class OpCoProductRev
    
    End Class
    
    
    Partial Public Class OpCoProductRevMetadata
    
        <Required()>
        <DisplayName("xxxx")>
        <UIHint("xxxx")>
        <FilterUIHint("xxxxFilter")>
        <Display(Order:=1)>
        Public Property xxxx As Object
    
        <Required()>
        <DisplayName("yyyyy")>
        <UIHint("yyyyy")>
        <FilterUIHint("yyyyyFilter")>
        <Display(Order:=2)>
        Public Property yyyyy As Object
    
        <Required()>
        <DisplayName("zzzzzz")>
        <UIHint("zzzzzz")>
        <FilterUIHint("zzzzzzFilter")>
        <Display(Order:=3)>
        Public Property zzzzzz As Object
    
        <Required()>
        <DisplayName("aaa")>
        <UIHint("aaa")>
        <FilterUIHint("aaaFilter")>
        <Display(Order:=4)>
        Public Property aaa As Object
    
    
    End Class
    

    希望对你有帮助...

    【讨论】:

      最近更新 更多