将ASP.NET与动态数据结合使用,我的页面如下所示:
我想隐藏页面顶部的下拉列表Invoicing Complete
和Restricted Hours
。我使用以下方法从表中看不到它们:
[HideColumnIn(PageTemplate.ListDetails, PageTemplate.List)]
[ReadOnlyColumnIn(PageTemplate.Edit)]
[DisplayName("Invoicing Complete")]
public object Invoicing_Complete { get; set; }
但它们仍然出现在顶部,作为下拉列表。
我无法使用[ScaffoldColumn(false)]
完全隐藏它,我需要用户从Edit.aspx
和Insert.aspx
页面查看它。
请告知。
编辑:任何人都有任何想法?似乎无法找到如何做到这一点......我是否正确地解释了这个问题?答案 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控件。