2013-04-15 3 views
6

Ich bin mir bewusst, dass Sie Unterstreichungen für Datenattribute mit Bindestrichen ("Datenbindung" anstelle von "Datenbindung", im Objekt) verwenden, und sie automatisch durch Bindestriche ersetzt werden. Aber ich bin auf das Problem gestoßen, wo Sie diesen Unterstrich "hacken" nicht machen können, wenn das Attribut mit "name" endet. So habe ich diese beiden versucht, aber weder Arbeit:Kann das Datenattribut, das auf "name" endet, nicht verwenden?

@Html.TextBoxFor(model => model.Street, new { data_encrypted_name = "street" }) 

@Html.TextBoxFor(model => model.Street, new { @data_encrypted_name = "street" }) 

Wenn ich die HTML-Ansicht, die erzeugt wird, für beide Fälle oben, es erzeugt:

<input data-encrypted- id="ViewModel_Street" name="ViewModel.Street" type="text" value="" /> 

Zuerst dachte ich diese Macht haben etwas mit mehreren Unterstrichen/Bindestriche zu tun, aber ich versuchte, zwei weitere Testfälle, um zu sehen, was passieren würde, und sie beide funktionierte gut:

@Html.TextBoxFor(model => model.Street, new { data_encrypted_namme = "street" }) 

@Html.TextBoxFor(model => model.Street, new { data_name_encrypted = "street" }) 

Also das Problem auf jeden Fall mit „name zusammenhängt "Am Ende des Attributs.

Mache ich etwas falsch oder etwas fehlt, oder ist das ein Fehler in wie .NET die Attribute konvertiert?

(Zur Klarstellung verwenden wir Braintree Zahlungen, und sie erfordern die Verwendung von „Datenschlüsselten-name“ -Attribut auf bestimmte Eingaben, so dass wir nicht nur einen anderen Attributnamen wählen.)

+0

Da 'name' ein gültiges HTML-Attribut ist, könnte dies Ihre Probleme verursachen ..? – tier1

+1

Hmm, naja, im Sinne dieser Idee habe ich data_encrypted_id und data_encrypted_class ausprobiert, aber beide haben wie erwartet funktioniert. Es scheint also am Ende immer noch direkt mit "Name" zu tun zu haben. Danke für den Gedanken! –

+1

Nur als ein FYI, ich bin nicht in der Lage, dieses Verhalten, VS2012, MVC4, Cshtml-Datei auf Html.TextboxFor Helfer zu bestätigen. @ Html.TextBoxFor (x => x.TrapNumber, neu {data_encrypted_name = "Test"}) rendert sich passend für mich. . Auch getestet auf TextArea ohne Problem. Ich weiß, dass dies nicht Ihr Verhalten anspricht, aber ich wollte einen Einblick geben, dass es für mich kein Framework-Fehler ist ... – Tommy

Antwort

2

Dank Tommy, um das beschriebene Verhalten zu testen und zu finden, war kein Fehler für alle.

Nachdem Tommy das geschrieben hatte, schaute ich auf den Helper, den wir benutzten. Ich erkannte, dass wir tatsächlich eine Extension-Methode namens "NameLessTextBoxFor" (die wir hier gefunden: How to extend html.textboxfor to remove the name attribute?), die das name="" Attribut aus der Eingabe entfernt, bevor es angezeigt wird, verwenden. Ich hätte dies vor der Veröffentlichung bestätigen sollen, aber ich konnte nicht erkennen, dass dies Auswirkungen auf die HTML-Attribute haben könnte.

Und siehe da, wie Sie wahrscheinlich erwarten würden, war die Funktionalität dieser Methode auch abgeschnitten alle Attribut, das name="" enthielt. Es wurde eine sehr einfache Suche durchgeführt und der Text ersetzt und entfernt. Das war das Problem hier.

Vielen Dank für Ihre Zeit und Aufmerksamkeit zu diesem Thema und entschuldigen Sie, dass ich das selbst nicht gefangen habe.

Verwandte Themen