2008-08-22 74 views
11

我正在進入ASP.NET(C# - 我知道這個問題並不重要,但完全公開和所有這一切),雖然我喜歡asp:風格的控件保存我很多繁瑣的HTML製作,我經常對某些行爲感到沮喪。我在與Master Pages合作時遇到了一個最後一個晚上:我的<asp:BulletedList ID="nav">轉換爲HTML時變成了<ul id="ct100_nav">控件與標準HTML

還有其他問題 - 我注意到當你自動填充一個DataGrid時,它會添加屬性到我不一定想要的表格中。

我知道當你依賴一個框架來接管你的一些冗長的職責時,你必須接受一定的「約定優於配置」,但這些情況下的「約定」並不是這樣許多已建立的公約,而是不必要的附加。我知道爲什麼 ID添加了前綴,但我應該能夠調整和關閉這樣的事情,尤其是因爲,作爲一個Web標準傳道人,我不會在單個頁面中複製HTML ID。

所以這裏的問題是那些ASP.NET開發者比我更經驗豐富:在開發和部署應用程序的經驗中,你如何利用這些控件?你發現自己回到硬編碼的HTML?你使用混合?我不想在這些控件中圍繞特殊怪癖設計我的HTML,但是,如果可能的話,我想在可能的情況下利用它們。

什麼是男孩要做的?

回答

13

個人,

我認爲,標準的ASP.NET控件都很好,室內的東西 - 快速和骯髒的好在這種情況下。但是,我曾經和一位也是設計師的Web開發人員一起工作,他拒絕使用ASP.NET控件,只在HTML中編碼,並在需要時添加runat =「server」標籤。這更多的是因爲他想知道他的HTML究竟是如何呈現的,而且無論如何,一些ASP.NET控件不會達到標準合規性。

我坐在中間的某個地方 - 在適當的時候使用HTML,而不是在沒有的時候使用。你可以用CSS control Adapters

1

我也在冒險進入ASP.NET,也有類似的挫折..但是,你很快就會習慣它。你只需要記住,你沒有繁瑣的HTML製作的原因是因爲ASP.NET控件爲你做這一切

在某種程度上,您可以控制/調整這些東西,即使它意味着繼承控件並調整HTML輸出。

過去我不得不這樣做,在某些控件默認情況下不會通過W3C驗證通過在這裏和那裏添加一些額外的標記,所以我根據需要簡單地覆蓋並編輯(修復過於字面上幾個分鐘)..

我想說的是如何控制系統的工作..然後敲幾個自己在一起,這真的幫助我瞭解引擎蓋下發生了什麼,所以如果我遇到任何問題,我有一個想法去哪裏。

+0

「ASP.NET控件爲你做了這一切」 - 是的,但*很* – annakata 2008-12-19 08:42:57

+0

我不同意這種說法..我試圖成爲一個程序員,責怪程序員,而不是工具。我曾經有人評論過一些ASP.NET應用程序產生的標記是乾淨的。許多標準控件都很好。它只有當你在ViewState上依賴很多時,我討厭ViewState。 :) – 2008-12-19 12:23:05

2

至於服務器控件上的ID:通過訪問ClientID可以找到要寫入瀏覽器的實際ID。這樣,你可以結合服務器端和客戶端端腳本,但仍然不必硬編碼_id =「ct100_nav」_

我總是嘗試使用包含的控件,而不是「黑客」的HTML,因爲如果有更新或稍後改進,所有我的代碼仍然可以通過替換框架來工作,而且我不必更改任何HTML。

希望這有助於

0

如果ASP.NET添加了ID的前綴是你的問題稍後將使用JS或東西...你有.ClientID財產服務器端訪問它們。

如果ASP.NET添加的開銷,你應該考慮ASP.NET MVC(仍然預覽),你可以完全控制發出的HTML。

我移動到MVC,因爲我不喜歡的東西加得都....

2

@布賴恩, 是啊!你幾乎可以控制所有的行爲。考慮創建自定義控件(有三種類型)。我最近在我的問題here中給了他們一個概述。

我會強烈建議檢查出來,有幫我沒有結束:)

0

排序兩全其美我認爲這裏的大多數答案都以設計師的觀點來看。在一箇中小型項目中,代碼和CSS/HTML同步可能看起來像一個開銷,並使它們符合標準和清晰。設計師的方法是完全控制呈現的HTML。但有很多方法可以在ASP.NET中完全控制。而對於我來說,在aspx/ascx文件中使用所需的HTML是最不可擴展和骯髒的方式。如果你想通過CSS控制樣式,你總是可以通過CssClass屬性設置一個類的服務器端。如果你想通過JS訪問它們,你可以再次用正確的ID服務器端發射JS。這提供的唯一缺點是開發人員和設計師必須密切合作。無論如何,在任何大型項目中這都是不可避免的。但ASP.NET提供的優勢遠遠超過了這些困難。 不過,如果您想要符合標準的HTML,蒙皮支持和其他好東西來控制渲染的標記,您總是可以使用第三方控件。

1

HTML呈現這些ID的ID,因爲它的ASP.NET防止ID衝突的方式。每個容器控件(例如母版頁或嚮導控件)都會在其子ID的前面加上「ID_」。

在您的項目符號列表的情況下,ListView提供了一個不錯的中間地帶。您仍然可以將其綁定到數據源,但它可以更加嚴格地控制呈現的HTML。斯科特谷有一個很好的介紹到ListView這裏:

http://weblogs.asp.net/scottgu/archive/2007/08/10/the-asp-listview-control-part-1-building-a-product-listing-page-with-clean-css-ui.aspx

0

戴夫病房已經提到的,「這是防止ID衝突的ASP.NET的方式。」

一個非常好的例子是,如果您試圖將控件放入自定義控件中,那麼在轉發器中使用該自定義控件,以便自定義控件的HTML將爲頁面多次輸出。

正如其他人所提到的,如果您需要訪問JavaScript的控件,請使用ClientScript屬性,該屬性可讓您訪問ClientScriptManager並以此方式將腳本註冊到頁面。請確保在編寫腳本時使用您試圖引用的控件上的ClientID屬性,而不是僅輸入控件的ID。

4

簡短的回答是,你不應該使用asp:...一個標準的HTML控件的版本,除非你有一個非常好的理由。

初級開發人員經常被使用這些控件,因爲它們在大多數ASP.NET書籍中都有介紹,所以假設它們一定更好。他們不是。在這一點上,經過8年的ASP.NET開發之後,我只能想到2或3種情況,它們對標準HTML使用asp:... INPUT控件確實有意義。

13

實際上,我在這裏看到一些意見與我自己的一致後感到非常欣慰:ASP.NET作爲模板語言非常差。

我只是想反駁一對夫婦在這裏所作的親點(flamesuit上!):

戴夫·沃德提到ID的衝突 - 這是真的,但我怎麼處理得很糟糕。我寧願看到xpath或深層CSS選擇器引用的節點,而不是使ID實際上無用,除非推遲到像clientID這樣的ASP.NET內部 - 它只是讓CSS和JS更難以毫無意義地編寫。我不是很好,因爲他們採用了一種現有的,很好理解的語言,並說:「不,你必須要:」不,你不得不這樣做,按照我們現在的做法「,他們的方式是很差執行不力。例如asp:面板在一個瀏覽器中呈現一個表格,在另一個瀏覽器中呈現一個div!沒有文檔或執行,登錄控制(和許多其他標記)的標記是不可預測的。你打算如何讓設計師寫CSS?

Espo寫道,如果控制平臺改變了html,控件就會給你提供抽象的好處 - 這顯然是循環的(它只是因爲平臺在變化,而不需要如果我只有我自己的HTML在那裏),實際上造成了一個問題。如果控件將隨着更新再次發生變化,我的CSS應該如何應對?

護教者會說「是的,但你可以在配置中改變它」,或者談論重寫控件和自定義控件。那麼爲什麼我必須?這個css友好的控件包旨在解決這些問題中的一些問題,但是它的非語義標記並沒有解決ID問題。

由於使用webform應用程序開箱即可實現MVC(抽象概念,而不是3.5實現),因爲這些控件緊緊地綁定在視圖和控件上。現在傳統的網頁設計師有一個入口障礙,因爲他必須參與服務器端代碼才能實現曾經是CSS和JS的獨立領域。我同情這些人。

我強烈同意Kiwi的觀點,即控件允許某個特定應用程序的某些非常快速的開發,並且我接受無論出於何種原因,某些程序員發現HTML不愉快,並進一步指出ASP的其他部分的優點。 NET給你,這需要這些控件,可能是值得的價格。

然而,討厭失控,我覺得處理之類的東西類,樣式和腳本的代碼隱藏的模型是一個判斷錯誤的倒退,而且我還覺得有一個用於模板更好的模型(這個平臺的微格式和xslt的實現),儘管用這些替換控件並不重要。

我認爲ASP.NET可以從LAMP和rails世界的相關技術中學到很多東西,直到那時我希望能夠在3.5 MVC下工作。

(抱歉,這是這麼長時間< /咆哮>)

0

如果您希望在呈現的HTML多的控制,看看ASP.NET MVC代替。