2010-05-17 92 views
4

請問這代碼被認爲是不好的做法:這是爲什麼認爲是不好的做法?還是它? (ASP.Net)

<div id="sidebar"> 
    <% =DisplayMeetings(12) %> 
</div> 

這是代碼從一個小的web應用程序我曾經參與的Default.aspx的一個片段。它運行得非常好,運行速度非常快,但我一如既往地意識到這樣一個事實,即僅僅因爲它的工作原理,並不意味着它是可以的。

基本上,DisplayMeetings子程序基本上輸出一串格式化的HTML(實際上是一個無序列表),沒有格式化,只是必需的html,然後我的CSS執行所有必要的格式。

用於生成列表的數據來自SQL服務器數據庫(該參數控制返回的行數),我使用存儲過程和數據讀取器進行快速訪問。這使我的前端變得非常簡單和乾淨,我可以讓我在一個單獨的模塊中使用VB或C#完成所有工作。

我當然可以使用一個數據綁定中繼器(可能有6個或更多的其他方法)來完成同樣的事情,但它們會更好嗎?除了失去VS2010的設計時功能?

+0

誰說這不好?它打破了什麼規則? – 2010-05-17 21:38:49

+3

沒有人專門,但在一個人的商店工作,每隔一段時間,我覺得需要質疑我自己的方法,並獲得建議。 – user318573 2010-05-17 21:43:56

+1

+1評論 - 智能練習 – Ray 2010-05-17 21:46:18

回答

2

您的方法唯一「錯誤」是它混合了代碼和顯示,您通常希望儘可能避免代碼和顯示。如果你必須有程序生成的HTML部分(因爲這對於控件或其他任何東西來說都很難做到),請創建一個負責生成該HTML並將其嵌入到包含它的較大頁面/控件中的控件。

是「錯誤」的部分,該子程序是否返回HTML,或者是我有一個代碼段從HTML標記內執行?

兩者在某種程度上。也沒有。

使用<%= foo %>沒有什麼直接的「錯誤」如果有的話,它不會是框架的一部分。它有什麼「錯誤」是它建立了一個你不一定想要的雙向依賴關係。您的HTML標記依賴於並且必須知道代碼隱藏。它必須調用這個方法,而這個方法又是用於標記而沒有其他的。如果您想對輸出進行更改,則可能必須更改方法,標記或兩者。

我想說的是,你正在做的事情使得你的代碼不易維護,不太靈活,以便下次打開引擎蓋時進行修改。

如果這是解決問題的唯一方法,那麼這是唯一的方法,並且沒有任何問題。但是,如果可能的話,應該避免這種情況。

我該怎麼做呢?坦率地說,這取決於情況。如果我能用數據綁定的標準組件,我會這樣做的。這總是首選。如果HTML過於複雜而無法使用組件,我會使用Literal控件作爲標記的佔位符,並在單獨的組件中生成標記 - 可能是用戶控件。

問題是標記對用於生成其他標記的方法一無所知,它只是說「有些東西在這裏」,並依靠它的代碼隱藏來處理決定放置哪個標記。

+0

是「錯誤」的部分,子例程是否返回HTML,或者是否有從HTML標記中執行的代碼片段? – user318573 2010-05-17 21:45:33

+0

@ user318573:我的回覆有點長,所以我編輯了我的回答。 – Randolpho 2010-05-18 03:44:24

2

這不是我想做的事情。我不是在Webforms中使用<%= %>的粉絲。可悲的是,這也是常見的做法。

我可能會做的是構建一個用戶控件來表示我想要的標記並將其放在窗體上。這具有使元素更加可重用,可測試的優點,並且使您可以更好地控制代碼調用的頁面生命週期中的哪個位置。

0

數據綁定中繼器可以使您在需要更改佈局時修改您的html稍微簡單一些。如果你有不同的工作在html上的人和服務器端代碼工作的人,這也是很好的。

我通常的規則是對任何即使稍微複雜的html都使用中繼器。而且我不會從我的aspx/ascx文件中調用方法 - 我只插入已在代碼中填充的受保護字符串變量的值。然而,這些都是個人喜好,我並沒有看到你在做什麼的真正錯誤。因爲沒有涉及數據綁定,所以你的代碼(沒有看到它)可能會比中繼器更快,但除非頁面非常流行,否則它可能不是一件大事。

相關問題