我一直迴避添加屬性到我的ASP.NET頁面。這對我來說似乎不是一個好主意。但是,最近我在幾個示例應用程序中看到了這種做法。我厭惡添加自定義屬性到一個頁面沒有根據,或者這是一個「它取決於」的情況?ASP.NET頁面屬性好主意或壞主意
回答
關於您需要記住的屬性的事情是,它們持續整個頁面生命週期。這使得它們都非常有用(在生命週期的早期階段設置一個屬性,並且它稍後仍然有效)和危險的(在設置屬性之前訪問屬性很容易,或者沒有意識到另一個生命週期階段會改變它)。
我曾經見過的一個屬性用來獲得很好的效果是一種很好的類型安全的方式來包裝查詢字符串和Session。爲每個預期的查詢字符串或會話值定義屬性,對未來的開發人員來說,預期和可用的內容變得非常清楚。
另一個常見用途是包裝ViewState項目。我期望這是你在樣本中看到它們的地方,因爲大多數樣本傾向於假定ViewState已打開。
爲什麼它會不好?屬性實際上只是方法,我相信你總是在頁面中添加方法。
我看到使用屬性來清理服務器端頁面上的代碼沒有錯。我喜歡使用屬性來訪問會話狀態或視圖狀態信息,這種方式如果我修改我如何訪問數據,我只改變一個地方。
Asp.net不支持基於構造函數的注入。這是一個清晰的場景,您想使用asp.net屬性(因爲您可以使用基於屬性的注入)。
更新1:這裏是一個類似的情況,但對於控制 - How to use Dependency Injection with ASP.NET Web Forms
更新2:這是確定使用它們來包裝視圖狀態或查詢字符串。我會仔細看看它,因爲你不想濫用代碼隱藏。如果你看到你多次使用代碼隱藏的一個包裝屬性,代碼隱藏中可能有太多的代碼。以這種方式來看,它具有避免可以與這些屬性關聯的重複投射/解析的副作用。
我在我的asp.net頁面上使用屬性來訪問Session,Viewstate和querystring。它只會讓你編寫更少的代碼並提高可讀性
頁面上的屬性沒有任何問題。他們可能會覺得奇怪,因爲頁面很少被外部代碼作爲對象操作,但可以完成。鑑於此,頁面上的大多數屬性都可以標記爲私有。像所有事情一樣,也有例外。
我有我的網頁上性能的最大用途的包裝一ViewState的值時:
protected string TaskName
{
get { return (string)ViewState["TaskName"] ?? string.Empty; }
set { ViewState["TaskName"] = value; }
}
在這種情況下,我已標記屬性爲「受保護」,讓我從訪問我的標記。
- 1. URL中的撇號。好主意或壞主意?爲什麼?
- 2. Memcaching獅身人面像結果 - 好主意還是壞主意?
- 3. 帶代表的單身人士:好主意還是壞主意?
- 4. 在Firebase(AngularFire)中存儲HTML,好主意還是壞主意?
- 5. 緩存結束迭代器 - 好主意還是壞主意?
- 6. 在SQL表名中包含數字的好主意或壞主意?
- 7. 好主意或壞主意?使用靜態類變量來存儲全局
- 8. 這種方法是增加MySQL性能的好主意還是壞主意?
- 9. 正在學習Zend或CakePHP等框架,而剛開始學習面向對象的好主意或壞主意?
- 10. 好主意或壞主意,在REST服務的輸出中使用xml元素的非確定性排序?
- 11. 顯示:沒有動態選擇和頁面上的輸入...這是一個好主意或不好主意
- 12. 在<head>內使用<noscript>:好主意還是壞主意?
- 13. 將原始數據存儲在cookie中 - 好主意還是壞主意?
- 14. 拆分數據庫Web應用程序 - 好主意還是壞主意?
- 15. 在對象上創建實例間感知?好主意還是壞主意?
- 16. (iphone)是一個壞主意?
- 17. 用RabbitMQ解耦同步web服務層,好或壞主意?
- 18. MongoDB中的僞主鍵 - 壞主意?
- 19. 好主意/不好主意(/其他想法?)
- 20. 在SPA中堆疊頁面,好主意還是不好?
- 21. 使BaseViewData類成爲BaseController類的屬性是一個壞主意?
- 22. 整個頁面的非系統字體 - 壞主意?
- 23. 使用Subversion對SQLite數據庫進行版本控制。好主意或壞主意?
- 24. MSMQ是一個好主意
- 25. 好主意忽略錯誤?
- 26. 在父類中訪問子類屬性是一個好主意
- 27. 在rails中使用has_one嵌套屬性是個好主意嗎?
- 28. 在Python接口中定義屬性是一個好主意嗎?
- 29. 什麼時候使用CSS顯示屬性是個好主意?
- 30. AJAX加載頁面內容是個好主意嗎?