2010-03-24 8 views
7

I am amorevole ASP.NET MVC, tenere il passo con le versioni/documenti può a volte essere complicato, quindi forse non sto ottenendo qualcosa ... Voglio usare un TextBoxFor(), e lavorando con LabelFor() ecc. va bene, tutta la magia accade per me.Riferimento di un ID di controllo creato con TextBoxFor()

Ma se creo ...

<%=Html.TextBoxFor(x => x.LastName) %> 

e volevo fare qualcosa di bello con jQuery, come vorrei ottenere l'ID del controllo che è stato creato? Potrei aggiungere una classe CSS e l'uso che per attaccare il mio jQuery, ma per qualcosa che sto facendo mi piacerebbe l'ID ... così ho potuto fare qualcosa di simile:

$('#LastName').(...) 

So che avrei potuto lavorare fuori in questo caso, e modificarlo manualmente, ma esiste un modo più ordinato?

+1

Questo non funziona? Quando lo provo, sembra che generi l'ID come mi aspetterei che fosse chiamato. Quando visualizzi il codice sorgente HTML sulla pagina, qual è l'output di 'TextBoxFor()'? – Amadiere

+0

Questo funziona e genera l'ID che ci si aspetterebbe, ma penso che se il framework può funzionare per una casella di testo, sarebbe in grado di risolverlo in altri posti ... Particolarmente utile quando l'ID viene generato a un array in modo da ottenere un ID come "Websites_0__Url". Il modo manuale funziona, penso solo che MVC deve sapere questo per me e mi fa fare errori;) –

risposta

7

Poiché MVC4 esiste un modo integrato per farlo - @Html.IdFor().

Here is a sample di usarlo:

@Html.IdFor(m => m.Filters.Occurred.From) 

e il risultato è come

Filters_Occurred_From 
12

Penso che si possa fare qualcosa di simile:

<%=Html.TextBoxFor(x => x.LastName, new { id = "LastName" })%> 

Overloads of TextBoxFor

+0

Questo funzionerebbe nella maggior parte dei casi, e penso di avere il collegamento tra ID e Nome troppo fermo nella mia testa, ovviamente potrei modificalo! Penso che avrebbe problemi quando era un array che MVC ha elaborato gli ID di controllo e hai finito con ecc. –

+0

Un altro modo per farlo è usare MvcContrib, che introduce il metodo IdFor, che ti permette di fare <% = this.IdFor (x => x.LastName)%> che è magico! –

+0

Invece di generare manualmente gli identificatori di campo, consiglierei l'approccio di Colin o se non vuoi dipendere da MVCContrib allora http://stackoverflow.com/questions/3065307/client-id-for-property-asp-net-mvc – JCallico

0

Come un punto di interesse sembra che il codice Html.Textbox() genererà un id, duplicando il nome del controllo per qualsiasi cosa che inizia con una lettera (az). Se tuttavia il tuo "nome" inizia con un numero, semplicemente non si preoccuperà.

Questa è una fantastica "funzionalità" che mi ha causato dolore nell'ultima ora.

-1

Per impostazione predefinita, l'ID di controllo è il valore di rilegatura del modello, È inoltre possibile utilizzare solo firebug. seleziona il controllo e ottieni come ID di controllo predefinito.

Problemi correlati