Es posible cuando se utiliza Html.TextBoxFor a reemplazar el nombre de atributo?

He intentado sin éxito. Necesito usar TextBoxFor para obtener la validación del lado del cliente para el trabajo, sin embargo por razones que no voy a entrar en necesito el nombre del cuadro de texto para que sean distintos de los generados.

He probado los siguientes:

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

Que trabaja para el ID, pero no de nombre. Es esto posible?

Actualización: Buscando en el código de TextBoxFor. No se ve como hay una manera fácil. Esperemos que alguien puede demostrar que estoy equivocado.

11 Comentarios

  1. 215

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

    @Html.TextBoxFor(x => x.Data, new { Name = Model.Key + "_Data", id = Model.Key + "_Data" })
    • oh, wow, en su caso sensibles lol
    • Las mayúsculas de las minúsculas es @highwingers, este pequeño detalle tiene el potencial de ahorrar horas.
    • Overkill.. Nombre pero id X_X
    • lo siento, ¿a qué te refieres?
    • Raro, «id» no es case-sensitive (funciona bien con el Id y id), pero «nombre» no lo es.
    • Sí, esta característica es como una solución, en la que estoy de acuerdo.
    • Con ASP.NET 4, proporcionando Name resultados en dos atributos, Name y name, y el cuaderno de modelo utiliza el name.
    • Pero el manejo de dos propiedades diferentes, cuyos nombres se diferencian sólo por caso, es una receta para una pesadilla de mantenimiento…..
    • +1 bc esta trabajado. todavía buscando una manera de decirle a Chrome para poner el apellido en un campo en lugar de correo electrónico.
    • ¿puede describir el problema que se enfrenta? Tal vez crear una nueva pregunta en stackoverflow?
    • la construcción de un formulario de registro, poner en el name atributos, pero Chrome sigue poniendo de correo electrónico en el email Y lname campos. Podría llegar a hacerlo, pero ahora mismo, estoy trabajando en las cosas que se apresura a corregir o de plano roto. De los plazos y de todos :-\
    • tal vez Chrome es sobrescribir el último nombre de campo mediante el uso de la función autocompletar del navegador. La buena suerte de todos modos.
    • No sé cuánto tiempo he sido la solución de problemas MVC Modelo de Enlace, sólo para ver el tutorial tras tutorial de uso de los corchetes, pero no ser capaz de poner en. Esto finalmente se resolvió mi problema. Gracias, señor!
    • Conozco esa sensación, así que me alegro de que podía ayudar.
    • Funciona, pero no está documentado, por lo que es responsable para el cambio… me temo que el uso de esta «característica» a menos que alguien tenga una referencia oficial?
    • Gracias, me salvó un montón de tiempo.
    • Fascinante! trabajo como un encanto.
    • Ganador ganador, el pollo de la cena.
    • Creo que este debe ser reemplazado como la respuesta.
    • He sustituido la respuesta.
    • Muy viejo, puede ayudar a alguien, para hacer la validación del trabajo @Html.ValidationMessageFor(x => x.Datos de cadena.Vacío, nuevo { data_valmsg_for = Modelo.Clave + «_Data» }).

  2. 40

    Estás preguntando esto porque desea aplicar un prefijo para el nombre? Si es así, usted puede hacer esto mediante el establecimiento de ViewData.TemplateInfo.HtmlFieldPrefix en el Controlador.

    He aprendido mucho sobre estas cosas de El blog de Brad Wilson.

    • Esto se ve como el ganador! Hermoso.
    • Sí se escondieron de que un bien no se 🙂
    • Esto sólo me salvó un poco de dolor de cabeza y la duplicación de código.
  3. 13

    EditorFor tiene una sobrecarga en donde usted puede proporcionar la name atributo como un parámetro:

     @Html.EditorFor(expression, null, name)
    • esto debe ser aceptado respuesta
    • Me habría ahorrado horas si he encontrado este hace unas horas, jaja
    • Interesante, pero no hay ninguna sobrecarga para el atributo de nombre similar ayudantes como DropDownListFor, usted tiene que especificar en el código html parámetro de atributos (con un capital de N en el Nombre).
  4. 8

    Intentar EditorFor. usted puede pasar a la cadena como el nombre de la plantilla si desea asegurarse de cuadro de texto se representa incluso si la propiedad no es la cadena. Si la propiedad es la cadena ya está, no necesita templatename explícitamente para representar un cuadro de texto, así que usted puede pasar null. Tenga en cuenta que no requiere la identificación del parámetro de forma explícita, que se infiera a partir nombre del elemento. Y todos la validación de las cosas todavía están activos con EditorFor

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

    de ben respuesta me consiguió lo que estaba buscando, excepto que necesita para envolver en en Html.Raw

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

    un poco «unpretty»=), trate de:

    @Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")
    • Parece una buena manera fácil de hacerlo. Si un poco chapucero 🙂
    • umm, de esta manera, wouldnt usted en lugar de simplemente tomar Html normal.TexBox.. desde cualquier estáticos se ha ido de todos modos después de reemplazar
    • jaja johnny. Yo NO lo creo^^^, mezcla estática y const
  7. 3

    Es llamar a Microsoft GOTCHA

    Usar el nombre en mayúsculas, como este

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

    Para mí, funciona! Espero que ayude!

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

    No esta seguro de cual de los dos parámetros de la cadena en el medio de hacer el trabajo, pero se trabajó sólo cuando he escrito tanto de ellos.

    • El primer parámetro representa la propiedad «name», el segundo es el nuevo nombre de…
    • Es el Identificador y el Nombre. esto funcionó para mí. Me fui a través de todas las respuestas de arriba y no funcionó, pero esto 1. Gracias.
    • public static MvcHtmlString EditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string templateName, string htmlFieldName, object additionalViewData);. Ni idea de lo que templateName se supone que debe ser, así que he usado null. Para htmlFieldName he utilizado el nombre del parámetro (en mi caso «ipmi» en lugar de «IMPI»). Que hizo el truco para mí.
  10. 0

    Para este ejemplo, yo era la desactivación de los campos de formulario basado en permisos, pero aún con ellos. Yo tenía un campo oculto para enviar el valor al controlador, pero quería un campo diferente nombre en el EditorFor.
    El primer parámetro después de modelo de valor representa la propiedad «name», 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" /> 
  11. 0

    Keep it simple, ya que proporciona el IDENTIFICADOR que usted simplemente debe ser capaz de utilizar el método de «cuadro de texto» en lugar de «TextBoxFor» y va a funcionar bien del lado cliente y del lado del servidor. Además, aunque la aceptó responder funciona, pero producir duplicados atributos de Nombre en su etiqueta si usted inspeccionar el uso de un navegador. La siguiente solución no tiene ese problema.

    MvcHtmlString Html.Cuadro de texto(string nombre, string valor, objeto htmlAttributes)

    @Html.TextBox(Model.Key + "_Data", Model.Key, new { id = Model.Key + "_Data" }

Dejar respuesta

Please enter your comment!
Please enter your name here