c# - que - ASP.NET MVC 3: anula el atributo "nombre" con TextBoxFor
que son los helpers en mvc (10)
¿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.
¡Para mí, funciona! ¡Espero que eso ayude!
@Html.EditorFor(model => model.Nome, new { htmlAttributes = new { @class = "form-control", @maxlength = "80", @id = "NomeFilter", @Name = "NomeFilter" } })
¿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)
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"))
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:
<input class="form-control text-box single-line" disabled="disabled" id="UserNameDisabled" name="UserNameDisabled" type="text" value="someEnteredValue" />
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")
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" })
Se llama Microsoft GOTCHA
Usa el nombre en mayúsculas, como este
@Html.TextBoxFor(m => m.Reply.Answer, new {@Name="Whatyouwant"})
un poco "desagradable" =), intenta:
@Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")
@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.