隐藏ASP.NET动态数据中的过滤器

时间:2013-04-10 10:41:13

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

将ASP.NET与动态数据结合使用,我的页面如下所示:

enter image description here

我想隐藏页面顶部的下拉列表Invoicing CompleteRestricted Hours。我使用以下方法从表中看不到它们:

[HideColumnIn(PageTemplate.ListDetails, PageTemplate.List)]
[ReadOnlyColumnIn(PageTemplate.Edit)]
[DisplayName("Invoicing Complete")]
public object Invoicing_Complete { get; set; }

但它们仍然出现在顶部,作为下拉列表。 我无法使用[ScaffoldColumn(false)]完全隐藏它,我需要用户从Edit.aspxInsert.aspx页面查看它。

请告知。

编辑:任何人都有任何想法?似乎无法找到如何做到这一点......我是否正确地解释了这个问题?

1 个答案:

答案 0 :(得分:3)

John, HideColumnIn ReadOnlyColumnIn 是隐藏而非过滤器(ForeignKey过滤器)的属性。

您可以通过多种方式解决此问题。

第一种方法,如果您使用的是 .NET Framework 4.5 .NET Framework 4 ,则可以使用 AutoGenerateFilter Property > DisplayAttribute 即可。例如,

[Display(Name = "Invoicing Complete", AutoGenerateFilter = false)]

您可以在AutoGenerateFilter找到更多信息。

第二种方法是创建新属性(如 HideColumnIn ),然后更改 ForeignKey 过滤器的Code-Behind。

一些例子:

<强> HideFilterAttribute.cs

using System;

namespace iSite.Classes.Attributes
{
    [AttributeUsage(AttributeTargets.Property)]
    public class HideFilterAttribute : Attribute
    {
        public Boolean Hide { get; private set; }

        public HideFilterAttribute(Boolean hide)
        {
            this.Hide = hide;
        }

        // default
        public static HideFilterAttribute Default =
            new HideFilterAttribute(false);
    }
}

<强> ForeignKey.ascx.cs

public partial class ForeignKeyFilter : System.Web.DynamicData.QueryableFilterUserControl
{
        protected void Page_Init(object sender, EventArgs e)
        {
                string initialValue = DefaultValue;
                if (initialValue == null && Column.Attributes.OfType<HideFilterAttribute>().DefaultIfEmpty(HideFilterAttribute.Default).First().Hide)
                {
                        this.NamingContainer.Visible = false;
                }
                else
                {
                        PopulateListControl(DropDownList1);
                        if (!String.IsNullOrEmpty(initialValue))
                        {
                                ListItem li = new ListItem();
                                li = DropDownList1.Items.FindByValue(initialValue);
                                DropDownList1.Items.Clear();
                                DropDownList1.Items.Add(li);
                        }
                }
        }
}

第三种和第四种方式没有DynamicData方法。您可以对此列使用自定义过滤器,并通过可见属性隐藏DropDownList控件。而且你也可以通过jQuery库隐藏DropDownList控件。