2010-11-09 60 views
4

我從幾個不同的消息來源得知,當在ASP.NET MVC2中使用HTML助手時,可以使用破折號創建自定義屬性(例如,<數據 - rowId =「5」>)通過使用下劃線代替破折號,並且當HTML寫入頁面時,下劃線將被破折號替換。ASP.NET MVC2不會用HtmlAttributes中的破折號代替下劃線

所以,這樣的事情:

<%= HtmlActionLink(Model.Name, "MyView", null, new {data_rowId = Model.id}) %> 

應該呈現爲

<a data-rowId="0" href="myURL">Row Name</a> 

但是......事實並非如此。我想也許這個功能只能在MVC3 Beta預覽版中啓用(如MVC3預覽版發佈說明中提到的那樣),但this thread與此基本相同,而且與MVC2有關。

我知道我可以使用該線程中提供的其他解決方案,但我寧願不必訴諸使用字典,如果存在更優雅的解決方案。

任何人都知道是否有簡單的事情我可以做到讓這個特定的事情工作?

回答

4

不完全是最優雅的solution但可能接受:

<%= Html.ActionLink(
    Model.Name, 
    "MyView", 
    null, 
    new Dictionary<string, string> { { "data-rowId", Model.id } } 
) %> 

在一個側面說明:data-rowId是根據標準的文檔類型,所以也許最優雅的解決辦法是擺脫在HTML完全無效的屬性它:-)

+2

Data-屬性對HTML 5有效。http://dev.w3.org/html5/spec/elements.html#embedding-custom-non-visible-data – 2010-11-20 20:33:33

+0

@Erik Philips,HTML5仍然是草稿並沒有得到所有瀏覽器的支持,但好點。 – 2010-11-20 20:35:25

+0

我希望這不是答案,但無法找到更好的方法。我以爲我看到某個地方的下劃線被提升爲破折號......哦! – Jafin 2011-07-27 06:32:32

0

考慮一下ASP.NET MVC的設計目的。它旨在讓您可以嚴格控制您製作的HTML。如果某些東西無法訪問,則不必通過箍環來修復它。你想要做的是創建無效的HTML或XHTML。而不是試圖使HTML無效簡化爲只使用一個ID。可訪問性準則中的#1是HTML對聲明的類型有效。

只要文檔中的ID是唯一的,就可以滿足HTML的一致性 - 並且使用jQuery進行操作會更容易。

如果我可以,爲什麼你要創建無效的HTML?或者這是一種專有的XML格式?

順便說一句,MVC 3 RC今天出來了。


編輯

與HTML5功能播放,而 「閃亮」 和庫爾,是不穩定的。規範的許多部分每週更換一次。當最終規範發佈時,現在認爲好的可能並不好。 MVC 3確實有一些東西可以讓你的工作更友好,因爲現在你必須使用字典。

+0

我們使用新的HTML5文檔類型,只要格式爲「data-whatever」,就可以在任何html元素上自定義數據屬性。這是完全有效的HTML。 http://html5doctor.com/html5-custom-data-attributes/ – Isochronous 2010-11-10 15:29:42

+0

需要考慮的兩件事:「id」比data-rowId更合適,屬性仍然無效(根據規範沒有大寫字母)。相反,它應該是「data-row-id」。字典方法是MVC 2中唯一可用的方法來執行您想要的操作。 – 2010-11-10 15:39:20

+0

我無法使用「id」,因爲頁面上可能有兩個不同的列表,每個列表都有不同的數據集,並且在一個列表中可能有一行與第二個列表中的行具有相同的id。我知道HTML5規範很難定稿,但自定義數據屬性似乎是規範中非常穩定的一部分。另外,使用HTML5的決定來自我的部門負責人,所以我不會告訴他他試圖成爲「閃亮」和「酷酷」。我更喜歡低調的答案,但無論如何感謝。 – Isochronous 2010-11-10 16:00:48

3

System.Web.Mvc.HtmlHelper提供了一個靜態方法,做你在找什麼:

<%= Html.ActionLink(
    Model.Name, 
    "MyView", 
    null, 
    HtmlHelper.AnonymousObjectToHtmlAttributes(new { data_row_id: Model.id }) 
) %> 

這種方法將取代下劃線連字符 - 正如有人指出的,雖然,一定要使用全部小寫的屬性名稱,這是符合HTML5的。

相關問題