339 Stimmen

Verwendung von Bindestrichen in HTML-5 data-* Attributen in ASP.NET MVC

Ich versuche zu verwenden HTML5 Daten-Attribute in meinem ASP.NET MVC 1 Projekt. (Ich bin ein C# und ASP.NET MVC Neuling.)

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

Die "data-details" in den oben genannten htmlAttributes führen zu dem folgenden Fehler:

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

Es funktioniert, wenn ich data_details verwende, aber ich denke, es muss mit "data-" beginnen, wie in der Spezifikation angegeben.

Meine Fragen:

  • Gibt es eine Möglichkeit, dies zu erreichen und HTML5-Datenattribute mit Html.ActionLink oder ähnlichen Html-Hilfsmitteln zu verwenden?
  • Gibt es einen anderen Mechanismus, um benutzerdefinierte Daten an ein Element anzuhängen? Diese Daten sollen später von JS verarbeitet werden.

3voto

Keith Williams Punkte 2187

Am Ende habe ich einen normalen Hyperlink zusammen mit Url.Action , wie in:

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

Es ist hässlicher, aber man hat ein bisschen mehr Kontrolle über die a Tag, der manchmal bei stark AJAXifizierten Websites nützlich ist.

HTH

0voto

Ich mag es nicht, den reinen "a"-Tag zu verwenden, zu viel Tipparbeit. Also habe ich eine Lösung gefunden. In Ansicht es aussehen

<%: Html.ActionLink(node.Name, "Show", "Browse", 
                    Dic.Route("id", node.Id), Dic.New("data-nodeId", node.Id)) %>

Implementierung der Klasse Dic

public static class Dic
{
    public static Dictionary<string, object> New(params object[] attrs)
    {
        var res = new Dictionary<string, object>();
        for (var i = 0; i < attrs.Length; i = i + 2)
            res.Add(attrs[i].ToString(), attrs[i + 1]);
        return res;
    }

    public static RouteValueDictionary Route(params object[] attrs)
    {
        return new RouteValueDictionary(Dic.New(attrs));
    }
}

-2voto

gururaj nadager Punkte 19

Sie können ihn wie folgt verwenden:

In Mvc:

@Html.TextBoxFor(x=>x.Id,new{@data_val_number="10"});

In Html:

<input type="text" name="Id" data_val_number="10"/>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X