2011-09-09 63 views
0

這些代碼示例有什麼區別?哪種方法是正確的?綁定或不綁定

<asp:Label ID="lblShorName" runat="server" Text="<%#Customer.ShorName%>" /> 
lblShorName.DataBind(); 

lblShorName.Text = Customer.ShorName; 
+1

即使您想要在運行時更改生產環境中的站點,第一種方法也會更好,因爲它不需要編譯。其次是更好,因爲它是預編譯的,更具可讀性,並從視圖封裝模型。除了後者之外,由於您看到編譯器錯誤而不是運行時錯誤,所以不太容易出錯。 –

+1

@Tim - 並非完全正確 - 如果您已經部署了應用程序的預編譯版本,則無法更新第一種生產方式,您應該爲了查找編譯時(ASP.NET編譯時)錯誤而真正應用該版本。 –

+1

@Jakub:我不想詳述,因此只是一個評論。我想說的是,我只在測試環境中使用第一種方法,我想快速查看/更改值。但那是我的主觀意見。 –

回答

2

我所知道的沒有太大區別(儘管如果我錯了,我會對其他人的答案感興趣)。這只是編碼風格和偏好的問題。

個人而言,我更喜歡後者。我覺得它更乾淨,並將標記與驅動標記的功能分開。但那只是我。 (我也傾向於不喜歡使用數據綁定,但我不認爲需要這樣做,但同樣,這也是您希望如何使用所提供的工具的首選項。例如,在ASP.NET MVC視圖我更可能比我用任何一種中繼器或網格控件和數據綁定到它。只是個人喜好來寫這個循環中的循環和輸出HTML。)

很多它還配備直到您想要執行這些操作的應用程序的位置。前一個例子將它保留在頁面上,而後一個例子可以用條件包裝,重新考慮到另一個方法等。如果有可能的值不是總是將來自Customer.ShortName那麼我' d用後一個例子來添加附加的邏輯。

+1

另外,第二個會給你一個編譯時錯誤,而第一個會在你訪問這個頁面時(或在ASP.NET預編譯過程中)炸掉 - 也就是說。當你將'Text'重命名爲'Description'時。 –

+0

@Jakub Konecki:好點。儘管最近我一直在依賴編譯時檢查(_very_在持續集成構建中有用)和動態語言(Ruby,JavaScript等)之間徘徊。我總是把編譯時檢查看成是理所當然的,但儘管動態語言的支持者可能會說我仍然認爲這是一個非常有用的步驟,正如你給出的例子。 – David

0

不多說真的,當你使用數據綁定您的值設定爲綁定的時間,但是如果你把它的代碼隱藏,你可以將它設置的任何階段頁面生命週期。

您也可能有一些背後的邏輯值,這在代碼隱藏方面更具可讀性/可維護性。

1

該方法取決於您何時設置標籤。 lblShorName.Text = Customer.ShorName;可用於不同的方法,事件,定時器。如果你只想在開始時設置它,你可以使用第一個。