ASP.NET 服务器控件属性属性必须是必需的

Posted

技术标签:

【中文标题】ASP.NET 服务器控件属性属性必须是必需的【英文标题】:ASP.NET Server Control Property Attribute must be required 【发布时间】:2011-07-13 17:01:05 【问题描述】:

我有一个自定义的 ASP.NET 服务器控件 CustomControl,其属性属性为 Path

如果Path 没有明确指定,那么我想抛出一个异常。

例如,

<myControls:CustomControl Path="somedirectory/someotherdirectory/somefile.ext" runat="server" />

应该编译,并且

<myControls:CustomControl runat="server" /> 应该抛出异常。

我意识到我可以在 Path 属性的 getter 中执行此操作,但是是否有一些属性需要这样做?

更新

除了在代码隐藏属性的 getter 方法中使用之外,还有其他机制可以验证属性属性的值吗?

【问题讨论】:

Flag control properties as required in design view 的可能重复项 【参考方案1】:

没有必要的属性。执行此操作的最佳位置是在 Path 属性的 getter 中。

【讨论】:

虽然你总是可以编写自己的属性 如果没有处理它们,编写属性并没有多大用处。【参考方案2】:

我认为这不应该是编译时检查。

毕竟,属性值可能在 page_load 或类似事件期间的代码中提供。

【讨论】:

对于我的用例,这不是问题。【参考方案3】:

不,没有办法强制页面框架执行此操作。您需要在运行时在代码中执行此操作,如果未提供该值,则引发异常。否则我们永远不会遇到“废话,我忘记了 runat=server 部分”错误:)

【讨论】:

【参考方案4】:

你可以在自定义控件的init事件中检查这个,并抛出异常。

更新

有;在初始化事件中检查它。在主机(页面或用户控件)的 init 事件之后调用控件的 init。因此,如果它为 null 或为空,您可以抛出异常

【讨论】:

以上是关于ASP.NET 服务器控件属性属性必须是必需的的主要内容,如果未能解决你的问题,请参考以下文章

asp.net 每个控件的属性有啥作用?

如何使我的 ASP.NET 服务器控件将嵌入的代码块作为属性值?

为啥 ASP.Net 服务器控件声明需要 runat="server" 属性?

求asp.net所有控件属性。及相关介绍

必需属性在 ASP.NET 中不起作用

asp.net menu控件菜单项的间距如何调?