2013-04-15 16 views
6

Dobrze wiem, że używasz podkreśleń dla atrybutów danych z myślnikami ("data_bind" zamiast "data-bind", w obiekcie), a oni automatycznie otrzymują zastąpienie myślnikami. Ale natknąłem się na problem, w którym nie można zrobić tego podkreślenia "hack", jeśli atrybut kończy się na "imię". Więc próbowałem zarówno z nich, ale żadna praca:Nie można użyć atrybutu danych, który kończy się na "nazwa"?

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

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

Kiedy przeglądam HTML, który jest generowany dla obu powyższych przypadkach, generuje:

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

Na początku myślałem, że to może mieć coś do czynienia z wieloma podkreślenia/myślnikami, ale próbowałem dwa kolejne przypadki testowe, aby zobaczyć, co by się stało, i oboje pracowali w porządku:

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

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

więc ten problem jest na pewno związane z konieczności „nazwa "na końcu atrybutu.

Czy robię coś złego lub czegoś brakuje, czy jest to błąd w jaki sposób .NET konwertuje atrybuty?

(Dla wyjaśnienia, używamy Braintree Płatności i wymagają korzystania z „nazwa-zaszyfrowanych danych atrybutu” na pewnych nakładów, więc nie możemy po prostu wybrać inną nazwę atrybutu.)

+0

Ponieważ "nazwa" jest prawidłowym atrybutem HTML, może to powodować problemy ..? – tier1

+1

Hmm, cóż, zgodnie z tym pomysłem wypróbowałem data_encrypted_id i data_encrypted_class, ale obie zadziałały zgodnie z oczekiwaniami. Więc nadal wydaje się być bezpośrednio związane z "nazwa" na końcu. Dzięki za tę myśl! –

+1

Tak jak FYI, nie jestem w stanie potwierdzić tego zachowania, VS2012, MVC4, plik cshtml na pomocnika Html.TextboxFor. @ Html.TextBoxFor (x => x.TrapNumber, new {data_encrypted_name = "Test"}) renderuje się odpowiednio dla mnie. . Przetestowane również na TextArea bez problemu. Wiem, że to nie dotyczy twojego zachowania, ale chciałem dać wgląd w to, że nie wydaje mi się to ramowym "błędem" ... – Tommy

Odpowiedz

2

Dzięki Tommy za przetestowanie opisanego zachowania, a znalezienie go nie było błędem dla wszystkich.

Po tym, jak Tommy to napisał, spojrzałem na pomocnika, którego używaliśmy. Zdałem sobie sprawę, że faktycznie używamy metody Extension o nazwie "NameLessTextBoxFor" (którą znaleźliśmy tutaj: How to extend html.textboxfor to remove the name attribute?), która usuwa atrybut name="" z wejścia przed jego wyświetleniem. Powinienem był to potwierdzić przed wysłaniem, ale nie rozpoznałem, że może to wpłynąć na przekazywane w nim atrybuty HTML.

A oto i jak można się spodziewać, funkcjonalność tej metody również odcięła dowolny atrybut, który zawierał name="". To było bardzo proste wyszukiwanie i zastąpienie tego tekstu i usunięcie go. Tak było w tym przypadku.

Dziękuję za poświęcony czas i uwagę na ten problem i przepraszam, nie złapałem tego.

Powiązane problemy