我倾向于回避向ASP.NET页面添加属性。这对我来说似乎不是一个好主意。但是,最近我看到了一些示例应用中使用的做法。我是否厌恶向页面添加自定义属性是不合理的还是“这取决于”情况?
答案 0 :(得分:5)
我认为使用属性清理服务器端页面上的代码并没有错。我喜欢使用属性来访问会话状态或查看状态信息,这样如果我修改我访问数据的方式,我只改变一个地方。
答案 1 :(得分:3)
您需要记住的属性是它们持续整个页面生命周期。这使得它们都非常有用(在生命周期的早期设置属性,以后它仍然有效)和危险(在设置之前很容易访问属性,或者没有意识到另一个生命周期阶段会改变它)。
我所见过的一个区域效果很好,是一种很好的类型安全方式来包装查询字符串和Session。为每个预期的查询字符串或会话值定义属性,未来的开发人员可以清楚地了解预期和可用的内容。
另一个常见用途是包装ViewState项。我希望这是你在样本中看到它们的地方,因为大多数样本都倾向于假设ViewState已经打开。
答案 2 :(得分:2)
Asp.net不支持基于构造函数的注入。这是一个明确的场景,你想使用asp.net属性(因为你可以使用基于属性的注入)。
更新1:这是类似的情况,但对于控件 - How to use Dependency Injection with ASP.NET Web Forms
更新2:可以使用它们来包装viewstate或查询字符串。我会仔细看一下,因为你不想滥用代码隐藏。如果你看到你在代码隐藏中使用了一个包装属性,那么代码隐藏中的代码可能太多了。以这种方式看待它,具有避免可以与这些属性相关联的重复转换/解析的副作用。
答案 3 :(得分:2)
页面上的属性没有任何问题。他们可能会看到奇怪,因为外部代码很少将页面作为对象操作,但可以完成。鉴于此,页面上的大多数属性都可以标记为私有。像所有事情一样,也有例外。
我对页面属性的一个最大用途是包装ViewState值:
protected string TaskName
{
get { return (string)ViewState["TaskName"] ?? string.Empty; }
set { ViewState["TaskName"] = value; }
}
在这种情况下,我将该属性标记为“受保护”,允许我从我的标记中访问它。
答案 4 :(得分:1)
为什么会这么糟糕?属性实际上只是方法,我确信你一直在向页面添加方法。
答案 5 :(得分:0)
我在asp.net页面上使用属性来访问Session,Viewstate和querystring。它只会让你编写更少的代码并提高可读性