2013-04-15 7 views
6

Sono ben consapevole che si utilizza di sottolineatura per gli attributi di dati con i trattini ("data_bind" invece di "data-bind", nell'oggetto), e questi vengono automaticamente sostituite con trattini. Ma ho incontrato il problema in cui non è possibile eseguire questa sottolineatura "hack", se l'attributo termina con "nome". Così ho provato entrambi, ma nessuno dei due lavori:Impossibile utilizzare l'attributo di dati che termina con "nome"?

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

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

Quando osservo il codice HTML che viene generato, per entrambi i casi di cui sopra, esso genera:

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

In un primo momento, ho pensato che questo potrebbe avere a che fare con più di sottolineatura/trattini, ma ho provato altri due casi di test, per vedere cosa sarebbe successo, ed entrambi lavoravano bene:

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

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

Quindi questo problema è sicuramente legato ad avere "nome "alla fine dell'attributo.

sto facendo qualcosa di sbagliato o manca qualcosa, o si tratta di un bug nel modo in cui .NET converte gli attributi?

(Per chiarezza, usiamo Braintree pagamenti, e richiedono l'uso del "nome-dati crittografati" attributo alcuni ingressi, in modo da non possiamo semplicemente selezionare un altro nome dell'attributo.)

+0

Dal 'name' è un attributo HTML valido, che potrebbe essere la causa tuoi problemi ..? – tier1

+1

Hmm, beh, seguendo le linee di questa idea, ho provato data_encrypted_id e data_encrypted_class, ma entrambi hanno funzionato come previsto. Quindi sembra ancora direttamente correlato al "nome" alla fine. Grazie del pensiero! –

+1

Proprio come una FYI, non sono in grado di confermare questo comportamento, VS2012, MVC4, file cshtml su helper Html.TextboxFor. @ Html.TextBoxFor (x => x.TrapNumber, new {data_encrypted_name = "Test"}) viene visualizzato correttamente per me. . Testato anche su TextArea senza problemi. So che questo non affronta il tuo comportamento, ma volevo dare intuizione in quanto non sembra essere un 'bug' quadro per me ... – Tommy

risposta

2

Grazie a Tommy per testare il comportamento che ho descritto e trovarlo non era un bug per tutti.

Dopo Tommy ha scritto questo, ho guardato il Helper usavamo. Mi sono reso conto che in realtà stavamo usando un metodo di estensione chiamata "NameLessTextBoxFor" (che abbiamo trovato qui: How to extend html.textboxfor to remove the name attribute?), che rimuove l'attributo name="" dall'ingresso prima di visualizzarlo. Avrei dovuto confermarlo prima di postare, ma non ho riconosciuto che potrebbe influenzare gli attributi HTML passati in esso.

Ed ecco, come ci si aspetterebbe, probabilmente, la funzionalità di questo metodo è stato anche tagliando qualsiasi attributo che conteneva name="". Stava facendo una ricerca molto semplice e sostituiva quel testo e lo rimuoveva. Quindi questo era il problema qui.

Grazie per il vostro tempo e attenzione a questo problema e chiedere scusa non ho capito io stesso.

Problemi correlati