c# - DesignOnly 属性不会在运行时隐藏属性

标签 c# asp.net custom-controls

我正在构建一个带有公共(public)属性的自定义 Web 控件,我只希望在设计时可用(即使其在代码隐藏中不可用)。 DesignOnly 属性 promise 这样做,但是当我设置 [DesignOnly(true)] 时,它没有任何明显的效果:

[Bindable(true)]
[Category("Appearance")]
[DefaultValue(null)]
[Localizable(false)]
[DesignOnly(true)]
public string MyProp
{
    get
    {
        return ViewState["MyProp"] as string;
    }


    set
    {
        ViewState["MyProp"] = value;
    }
}

属性仍然 出现在 IntelliSense 背后的代码中。在 works 后面的代码中为其设置一个值。在这些方面,行为就像从未设置过该属性一样。我已经清理并重建了完整的解决方案。两次。

我做错了吗?那么,您能告诉我解决这个问题的正确方法是什么吗?

非常感谢。

最佳答案

The DesignOnly attribute promises to do just that

实际上,没有;它试图在代码可用时访问它时弄清楚;如果您撒谎(即声称某些东西在 可用时才设计),那么您应该预料到它会行为不端。编译器知道什么是可用的,并且此仅设计属性未在 C# 规范中定义,因此添加此属性对编译器没有影响。

尝试添加:

[EditorBrowsable(EditorBrowsableState.Never)]

代码编辑器 (IDE) 查看(但仅在使用单独的程序集时)- 请注意,这不会阻止您使用它 - 它只是隐藏它。

我相信 MSDN 文本试图描述代码中实际存在的属性与仅假装存在的属性之间的区别;实际上,您可以做各种事情来使设计器中出现虚假属性,而正是这些伪装 属性可能被标记为仅限设计。

关于c# - DesignOnly 属性不会在运行时隐藏属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2080618/

相关文章:

asp.net - 页面生命周期中 session 状态、应用程序状态在哪里?

c# - 数据注释 - 长类型的范围属性

WPF:访问控件程序集中的资源

Python GUI 自定义按钮

c# - 在 C# 中模拟无限滚动以获取页面的完整 html

c# - 复利计算器 - 求解 I 或者是否有更好的公式

c# - 从字符串动态构建 LINQ 查询

c# - 页面.FindControl?

jquery - jQuery HTML5 音频播放器的多个实例

c# - 使用解构元组赋值扩展方法进行类型推断