То, как использовать тире в данных HTML 5 -*, приписывает в ASP.NET MVC

Я пытаюсь использовать данные 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 дают следующую ошибку:

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

Это работает, когда я использую data_details, но я предполагаю, что это должно запускаться с "данных -" согласно спецификации.

Мои вопросы:

  • Есть ли любой способ получить эту работу и использовать атрибуты данных HTML5 с HTML. ActionLink или подобные помощники HTML?
  • Там какой-либо другой альтернативный механизм должен присоединить пользовательские данные к элементу? Эти данные должны быть обработаны позже JS.

318
задан Robert Harvey 8 July 2016 в 03:47
поделиться

2 ответа

Обновление: MVC 3 и более новые версии имеют встроенную поддержку этого. Рекомендуемые решения см. в ответе JohnnyO, получившем большое количество голосов ниже.

Я не думаю, что есть какие-либо ближайшие помощники для достижения этого, но у меня есть две идеи для вас, чтобы попробовать:

// 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" ) )%>

Просто идеи, не тестировал.

115
ответ дан 23 November 2019 в 01:00
поделиться

В итоге я использовал обычную гиперссылку вместе с Url.Action , например:

<a href='<%= Url.Action("Show", new { controller = "Browse", id = node.Id }) %>'
  data-nodeId='<%= node.Id %>'>
  <%: node.Name %>
</a>

Это уродливо, но у вас есть немного больше контроля над тегом a , который иногда бывает полезен на сайтах с высокой степенью AJAXified.

HTH

3
ответ дан 23 November 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: