2010-05-24 68 views
92

是否有創建與連字符屬性的元素時,而不是使用一個更好的語法:聯用HTML與asp.net的MVC屬性

<%= Html.TextBox ("name", value, new Dictionary<string, object> { {"data-foo", "bar"} }) %> 

縱觀HTML規範的標準提案HTML 5和WIA ARIA它似乎HTML屬性中的連字符正在計劃中,因爲某種簡單的名稱間距會更常見。

E.g. HTML 5建議自定義屬性的前綴爲data-,WIA ARIA對所有WIA ARIA屬性都使用aria-前綴。

在ASP.NET MVC中使用HTML助手(例如<%= Html.TextBox("name", value, new { attribute = attributeValue }) %>)時,匿名對象將轉換爲字典。

不幸的是在C#中名稱中不支持連字符,所以唯一的選擇是創建一個字典。其語法非常冗長,有沒有人看到更好的替代方法或改變ASP.NET MVC的HTML擴展功能的簡單方法,而無需重寫整個擴展?

回答

167

在數據屬性名稱中使用下劃線,它會爲您神奇地處理它,將其轉換爲連字符。它知道你想要一個連字符而不是下劃線,因爲下劃線在html屬性名稱中是無效的。

<%= Html.TextBox("name", value, new { @data_foo = "bar"}) %> 
+6

+1剛剛救了我寫一些真正難看的代碼。謝謝! – 2013-04-04 21:40:33

+2

我發現了一個類似的問題幾個SO問題,這是最好的答案。 – user2780436 2015-01-01 20:44:10

+0

你可以添加你的語句的原因**下劃線在HTML屬性**中無效。至少[html 4.01州](http://www.w3.org/TR/html401/intro/sgmltut.html#didx-attribute):_屬性值可能只包含字母(az和AZ),數字(0- 9),連字符(ASCII小數點45),句號(ASCII小數點46),下劃線(ASCII小數點95)和冒號(ASCII小數點58)_, – surfmuggle 2015-07-15 19:12:58

17

ActionLink htmlAttributes處提供的答案建議使用下劃線而不是連字符。 MVC.Net應該在發送頁面到瀏覽器時發出連字符而不是下劃線。

+0

這適用於我。 – 2012-07-17 22:35:50