1. ホーム
  2. asp.net-mvc

[解決済み] ASP.NET MVCでHTML-5のdata-*属性でダッシュを使用する方法

2022-03-17 10:32:50

質問

を使おうとしています。 HTML5 データ-属性 をASP.NET MVC 1プロジェクトで使用しています。(私はC#とASP.NET MVCの初心者です。)

 <%= Html.ActionLink("« Previous", "Search",
     new { keyword = Model.Keyword, page = Model.currPage - 1},
     new { @class = "prev", data-details = "Some Details"   })%>

上記のhtmlAttributesの中の"data-details"は、以下のエラーを出します。

 CS0746: Invalid anonymous type member declarator. Anonymous type members 
  must be declared with a member assignment, simple name or member access.

data_detailsを使うとうまくいくのですが、仕様通り"data-"で始めないといけないのでしょうか。

私の質問です。

  • Html.ActionLinkまたは同様のHtmlヘルパーを使用して、これを動作させ、HTML5のデータ属性を使用する方法はありますか?
  • カスタムデータを要素に添付するための他の代替メカニズムはありますか?このデータは、後でJSで処理される予定です。

どのように解決するのですか?

更新: MVC 3 以降のバージョンでは、ビルトインのサポートがあります。推奨される解決策については、以下のJohnnyOのupvotedされた回答を参照してください。

これを実現するためのヘルパーがすぐにあるとは思えませんが、試していただきたいアイデアが2つあります。

// 1: pass dictionary instead of anonymous object
<%= Html.ActionLink( "back", "Search",
    new { keyword = Model.Keyword, page = Model.currPage - 1},
    new Dictionary<string,Object> { {"class","prev"}, {"data-details","yada"} } )%>

// 2: pass custom type decorated with descriptor attributes
public class CustomArgs
{
    public CustomArgs( string className, string dataDetails ) { ... }

    [DisplayName("class")]
    public string Class { get; set; }
    [DisplayName("data-details")]
    public string DataDetails { get; set; }
}

<%= Html.ActionLink( "back", "Search",
    new { keyword = Model.Keyword, page = Model.currPage - 1},
    new CustomArgs( "prev", "yada" ) )%>

アイデアだけで、テストはしていません。