簡體   English   中英

ASP.NET:代碼落后或沒有代碼落后?

[英]ASP.NET: Code behind or no code behind?

為什么有人不想使用代碼隱藏文件,以便服務器端代碼與標記分開? 這不應該是.NET優於經典ASP的優勢之一嗎?

就個人而言,我認為將代碼與標記混合會使代碼更難理解。

我討厭看到那些與標記交叉拼湊的<%%>(服務器端塊),哎呀。 我希望這在ASP.NET中僅用於向后兼容Classic ASP,但我總是看到MS中包含那些黃色括號的示例。

我試圖理解一個可以在這里下載的代碼示例,並解釋為什么我執行代碼時這里顯示的任何服務器端斷點都沒有中斷,即使我看到已經在web.config中設置了。 由於我通常使用代碼隱藏,我想知道在aspx中是否有一些關於服務器端代碼的處理方式有所不同,這阻止了我調試runat = server代碼。

所以。 我的問題是:

1)為什么有人不想使用代碼隱藏文件,以便服務器端代碼與標記分開?

2)為什么我可能無法打破服務器端邏輯?

您的見解和意見也歡迎我的任何相關評論。

使用<% %>的內聯代碼能力不僅僅是為了向后兼容,而是.NET的一個功能,它可以允許一些(相對!)清晰直接的解決方案。 然而,它經常以不太理想的方式使用。 同樣,代碼隱藏中的代碼通常(通常實際上)以不太理想的方式使用,就像web控件一樣。

在代碼隱藏中使用代碼通常不會解決問題 ,而是將意大利面條代碼混雜在與傳統asp中不同的地方。 .NET確實允許您擁有組織良好的解決方案,但是由您來實現它。 在頁面后面的代碼中包含代碼並不是該旅程中的第一步,只是旅程可以開始的地方。

至於你的事件沒有解雇的原因,很可能是:

  • 事件實際上並未觸發。 (您是否更改了下拉列表中的選定項目,以實際觸發該事件?)
  • 您實際上沒有連接事件。 在該控件的屬性窗口中,是否列出了與相關事件對應的事件函數名稱? (這是最簡單的方法;例如,您也可以使用vb中的句柄鍵工作)
  • 通常當我的事件沒有被觸發時,因為我做了一些愚蠢的事情,比如沒有啟動我的代碼,或者我的網址指向錯誤的地方。

1)我想如果你習慣於開發經典的ASP,那么這是一個簡單的過渡。

2)沒有看到你的標記,我將無法告訴你你的問題是什么。 如果你沒有遇到那個斷點,可能有以下幾個原因之一:

  1. 可能會禁用調試
  2. 事件沒有發生
  3. 標記中沒有任何內容告訴控件您的方法是作為事件的處理程序存在的。

大多數MS示例中使用的括號通常用於函數調用或引用數據手冊。

例如, <%# Databinder.Eval("MyColumn") %>將用於轉發器。

還有一些標記用於引用web.config屬性,如連接字符串<%$ConnectionStrings:NorthwindConnection %>

很常見的“示例”ASP.NET代碼是使用內聯代碼分發的,因為它更容易以這種方式分發。 它是獨立的,您可以將其復制並粘貼到記事本中,將其作為.aspx保存在測試站點的文件夾中,並查看它是如何運行的。 這可能不是你想要在制作中做的事情。

至於更一般的問題...... ASP.NET MVC在技術上仍然是ASP.NET,不使用代碼隱藏文件。 許多開發人員認為代碼隱藏文件只是將一種丑陋的東西換成了另一種; 個人而言,我可以從雙方看到它,但我認為在經典ASP中如此糟糕的代碼的真正原因不是標簽湯,而是人們在“視圖”代碼中做瘋狂的事情,比如打開數據庫連接。 只要你不做那種事情,一些服務器標簽根本不是什么大問題。

事實上,如果你進行任何數據綁定,你將會有一堆EvalBind標簽與標記混合在一起。 因此,即使是具有代碼隱藏功能的純WebForms也不總是干凈利落。

2)為什么我可能無法打破服務器端邏輯?

當您開始調試時,構建可能會失敗,並且您沒有注意到選擇運行以前的構建。 您的斷點可能不存在於該構建中。

<%# DataBinder.Eval("Column") %>可以從后面的代碼中為你節省大量的額外代碼,而且在我看來,這並不是很糟糕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM