¿Es posible cuando se usa Html.TextBoxFor
para anular el atributo de nombre?
Lo he intentado sin éxito. Necesito usar TextBoxFor para que la validación del lado del cliente funcione, sin embargo, por razones que no voy a 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 que funciona para ID pero no para nombre. es posible?
Actualización : buscando en el código de TextBoxFor. No parece que haya una manera fácil. Ojalá alguien pueda demostrar que estoy equivocado.
c#
asp.net-mvc-3
razor
html-helper
Rob Stevenson-Leggett
fuente
fuente
Respuestas:
Rob, en realidad hay una forma mucho más sencilla. En lugar de nombre , use Nombre :
fuente
Name
resultados en dos atributos,Name
yname
, y el enlazador de modelos usaname
.¿Está preguntando esto porque desea aplicar un prefijo al nombre? Si es así, puede hacer esto configurando
ViewData.TemplateInfo.HtmlFieldPrefix
su Controller.Aprendí mucho sobre estas cosas en el blog de Brad Wilson .
fuente
EditorFor tiene una sobrecarga en la que puede proporcionar el
name
atributo como parámetro:fuente
Prueba EditorFor . puede pasar una cadena como nombre de plantilla si desea asegurarse de que el cuadro de texto se represente incluso si el tipo de propiedad no es una cadena. Si la propiedad ya es una cadena, no es necesario representar
templatename
explícitamente el cuadro de texto, por lo que puede pasarnull
. Tenga en cuenta que no requiere el parámetro id explícitamente, lo inferirá del nombre del elemento. Y todas las cosas de validación siguen activas con EditorForfuente
La respuesta de Ben me consiguió lo que estaba buscando, excepto que debes ajustarlo en Html.Raw
fuente
Se llama Microsoft GOTCHA
Usa el nombre en mayúsculas, así
fuente
un poco "desagradable" =), prueba:
fuente
¡Para mí funciona! ¡Espero que te ayude!
fuente
No estoy seguro de cuál de esos dos parámetros de cadena en el medio hace el trabajo, pero funcionó solo cuando los escribí.
fuente
public static MvcHtmlString EditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string templateName, string htmlFieldName, object additionalViewData);
. No tengo idea de lo quetemplateName
se supone que es, así que usénull
. PueshtmlFieldName
utilicé el nombre del parámetro (en mi caso, "ipmi" en lugar de "IPMI"). Eso funcionó para mí.Para este ejemplo, estaba deshabilitando campos de formulario según los permisos, pero aún los mostraba. Tenía un campo oculto para enviar el valor al controlador, pero quería un nombre de campo diferente en EditorFor. El primer parámetro después del valor del modelo representa la propiedad "nombre", el segundo es el nuevo nombre.
Resultados en:
fuente
Manténgalo simple, ya que está proporcionando la ID, simplemente debería poder usar el método "TextBox" en lugar de "TextBoxFor" y funcionará bien en el lado del cliente y en el lado del servidor. Además, aunque la respuesta aceptada funcionará, producirá atributos de nombre duplicados en su etiqueta si la inspecciona con un navegador. La siguiente solución no tiene ese problema.
MvcHtmlString Html.TextBox (nombre de cadena, valor de cadena, objeto htmlAttributes)
fuente