ASP.NET MVC 3: anula el atributo “nombre” con TextBoxFor

¿Es posible usar Html.TextBoxFor para anular el atributo de nombre?

Lo intenté sin éxito. Necesito usar TextBoxFor para que la validación del lado del cliente funcione, sin embargo, por razones que no entraré, necesito que el nombre del cuadro de texto sea diferente del generado.

He probado lo siguiente:

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

Lo cual funciona para ID pero no para nombre. es posible?

Actualización : mirando el código para TextBoxFor. No parece que haya una manera fácil. Con suerte, alguien puede probar que estoy equivocado.

Rob, en realidad hay una manera mucho más simple. En lugar de nombre , use Nombre :

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

¿Estás preguntando esto porque quieres aplicar un prefijo al nombre? De ser así, puede hacer esto configurando ViewData.TemplateInfo.HtmlFieldPrefix en su Controlador.

Aprendí mucho sobre esto del blog de Brad Wilson .

EditorFor tiene una sobrecarga en la que puede proporcionar el atributo de name como parámetro:

  @Html.EditorFor(expression, null, name) 

Pruebe EditorFor . puede pasar cadena como nombre de plantilla si desea asegurarse de que se represente el cuadro de texto aunque el tipo de propiedad no sea una cadena. Si la propiedad ya es cadena, no necesita templatename explícitamente para representar el cuadro de texto, por lo que puede pasar null . Tenga en cuenta que no requiere el parámetro id explícitamente, lo deducirá del nombre del elemento. Y todas las cosas de validación siguen activas con EditorFor

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

La respuesta de Ben me dio lo que estaba buscando, excepto que necesitas envolverlo en Html.Raw

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

un poco “desagradable” =), intenta:

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

Se llama Microsoft GOTCHA

Usa el nombre en mayúsculas, como este

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

¡Para mí, funciona! ¡Espero que eso ayude!

 @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" }) 

No estoy seguro de cuál de esos dos parámetros de cadena en el medio hace el trabajo, pero funcionó solo cuando escribí ambos.

Para este ejemplo, estaba deshabilitando campos de formulario en función de los permisos, pero todavía se muestran. Tenía un campo oculto para enviar el valor al controlador, pero quería un nombre de campo diferente en el Editor para. El primer parámetro después del valor del modelo representa la propiedad “nombre”, el segundo es el nuevo nombre.

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

Resultados en: