ASP.NET MVC 3: sostituisci l’attributo “nome” con TextBoxFor

È ansible utilizzare Html.TextBoxFor per sovrascrivere l’attributo name?

Ho provato senza successo. Ho bisogno di usare TextBoxFor per far funzionare la convalida lato client, tuttavia per ragioni che non entrerò ho bisogno che il nome della textbox sia diverso da quello generato.

Ho provato il seguente:

 @Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" }) 

Che funziona per ID ma non per nome. È ansible?

Aggiornamento : esaminando il codice per TextBoxFor. Non sembra che ci sia un modo semplice. Spero che qualcuno possa mettermi in errore.

Rob, in realtà c’è un modo molto più semplice. Invece del nome , usa Nome :

 @Html.TextBoxFor(x => x.Data, new { Name = Model.Key + "_Data", id = Model.Key + "_Data" }) 

Lo stai chiedendo perché vuoi applicare un prefisso al nome? In tal caso, puoi farlo impostando ViewData.TemplateInfo.HtmlFieldPrefix nel tuo controller.

Ho imparato molto su questa roba dal blog di Brad Wilson .

EditorFor ha un overload in cui è ansible fornire l’attributo name come parametro:

  @Html.EditorFor(expression, null, name) 

Prova EditorFor . puoi passare la stringa come nome del modello se vuoi assicurarti che la casella di testo sia visualizzata anche se il tipo di proprietà non è una stringa. Se la proprietà è già una stringa, non richiede templatename esplicitamente per il rendering della casella di testo, quindi è ansible passare null . Si noti che non richiede esplicitamente il parametro id, lo dedurrà dal nome dell’elemento. E tutte le cose di validazione sono ancora attive con EditorFor

  @Html.EditorFor(x => x.Data, "string", Model.Key + "_Data") 

la risposta di Ben mi ha ottenuto quello che stavo cercando, tranne che devi avvolgere in Html.Raw

 @Html.Raw(Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")) 

un po ‘”unpretty” =), prova:

 @Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData") 

Si chiama Microsoft GOTCHA

Usa il nome in maiuscolo, come questo

 @Html.TextBoxFor(m => m.Reply.Answer, new {@Name="Whatyouwant"}) 

Per me, funziona! Spero che aiuto!

 @Html.EditorFor(model => model.Nome, new { htmlAttributes = new { @class = "form-control", @maxlength = "80", @id = "NomeFilter", @Name = "NomeFilter" } }) 
 @Html.EditorFor(Model => Model.Something, "name", "name", new {@class = "form-control" }) 

Non sono sicuro quale di quei due parametri di stringa nel mezzo esegua il lavoro, ma ha funzionato solo quando ho digitato entrambi.

Per questo esempio, stavo distriggersndo i campi del modulo in base alle autorizzazioni, ma continuavo a mostrarli. Avevo un campo nascosto per inviare il valore al controller, ma volevo un nome di campo diverso in EditorFor. Il primo parametro dopo il valore del modello rappresenta la proprietà “nome”, il secondo è il nuovo nome.

 @Html.EditorFor(m => m.UserName, "name", "UserNameDisabled", new { htmlAttributes = new { @class = "form-control", @disabled = "disabled"} }); 

Risultati in: