2010-04-01 27 views
4

當我在Visual Studio 2010中使用T4模板生成的代碼,我碰到下面的錯誤我的每個ASP控制的,當我嘗試編譯:在VS2010中不一致需要新的asp「showat」屬性。爲什麼?

控制「ddState」缺少必需的屬性「showat」。

我從來沒有在以前的.NET版本中得到過這個錯誤。此外,我不要當我通過拖/放手動構建我的頁面時,得到此錯誤,我也沒有得到它時,我自己輸入控制文本。當我生成代碼時,我必須手動將showat="client"添加到我的標記中,以便編譯器很高興。這是我的理解,我從來不必明確指定這個標籤。如下:

<asp:dropdownlist id="ddState" runat="server" showat="client" /> 

解決了這個問題。爲什麼我必須將其添加到生成的代碼中,而不是其他時間?

(這是一個VS-2010的WebForms項目,使用VB,如果有差別。)

+8

我個人認爲這兩個強制性屬性是愚蠢的。你猜怎麼着;他們將在下一個版本中添加更多內容!我聽說他們計劃至少增加donot =「crash」,甚至更多。 – 2010-04-01 16:34:52

+0

VS2010智能感是否有'showat'的任何選項? – 2010-04-01 16:35:32

+1

@Matti同意! ASP控件上的'runat'每次都會傻乎乎的輸入,還有哪些地方會運行?但是將'runat = server'標記到普通的HTML表格/行/單元格上非常好。 – 2010-04-01 16:37:20

回答

1

當您使用IDE添加控件時,請檢查VB是否在Web窗體設計器頁面中執行任何操作。我不確定VB如何插入隱式標籤。但這將是T4模板將錯過的東西,只是一個想法...

+0

隱含標籤,你的意思是'showat' *屬性*,對吧? – 2010-04-01 17:31:29

3

顯然.NET 5或那些超級的服務包中的另一個將允許一些所謂的有針對性的渲染 。它最初只用於webforms的上下文,但我最近聽說在MVC(使用一些輔助類)和使用WCF的服務中使用它會有一些奇特的方式。它將與動態數據一起工作,但與它非常鬆散地耦合;你可以完全獨立地使用一個或另一個。如果你有一定的標籤配置您的動態數據,你可以把它在客戶端上構造等

對於現在,只是把showat="client"在所有的標記,一切都很好。這應該是隱含的默認值,但我聽說過IDE似乎需要它的情況。在未來,showat="client"無論如何將是最安全的設置,在99.9%的情況下給予預期的行爲。

+0

我認爲這就是我最終要做的。事實上,我現在要這樣做,所以我的課程將被編譯。我仍然希望有人知道爲什麼。首先,我無法得到答案,爲什麼一個* asp控件需要'runat'標籤。它總是讓我煩惱。所以'showat'讓我很煩。 – 2010-04-01 16:59:30

2

這在VB中是必需的,但不是C#,這就是爲什麼它有時似乎沒有必要。更具體地說,除非你指定showat目標而不是client,否則C#編譯器會自動將等效的showat=client加入到IL中。

+0

但是當我手動構建頁面時,它不是必需的。也許當你用C#構建T4時,你會遇到同樣的問題。你有沒有試過。 – 2010-04-01 16:43:57

+0

不,事實並非如此,因爲我們在我的商店中使用VS2010測試版中的T4做到了這一點。我們不需要任何標籤。 – kasabb 2010-04-01 16:47:13

2

「showat ='client'」目前對您的編碼影響不大。它的主要目的是爲將來的WCF輸出定位,他們將希望向後兼容。目前,唯一可能的值是「客戶端」,但未來還會有其他可能的值,這些值可以預先呈現緩存的值,並且顯然將輸出「推送」到服務。我在最後一個代碼集中看到的例子是,您可以將其推送到(可能)相同的站點以及客戶端計算機上的服務,以便進行記錄/調試。你會有類似的東西(用你的例子):

<asp:dropdownlist id="ddlCP" runat="server" showat="client, logService" /> 

。 。 。然後渲染將轉到您的日誌文件。或者,你的會話提供者(如果你有多個Web服務器並且正在實現一個共享會話提供者)等等,我想上面的logService必須在web.config或其他東西中定義。

+0

這非常酷。我可以看到它對於我期待使用的動態數據的效果如何。但是,你會知道爲什麼編譯器(至少是vb編譯器)有時需要顯式聲明屬性,而不是其他時間? – 2010-04-01 19:32:47

1

同意我的VS2010爲你解決這個問題。然後你可以完全刪除標籤。我會建議升級。這是599美元的升級成本。否則,請在所有標記中添加showat =「client」。我認爲新星有這個權利,雖然我還沒有測試過。

相關問題