asp.net mvc - pages - Diferencias entre Html.TextboxFor y Html.EditorFor en MVC y Razor
tag helper asp net core 2 (5)
¿Por qué se cambiaron de forma predeterminada al agregar una nueva vista de "editar"? ¿Cuáles son las ventajas al usar EditorFor()
frente a TextboxFor()
?
encontré esto
De forma predeterminada, los andamios de Crear y Editar ahora usan el Html.EditorFor helper en lugar del helper Html.TextBoxFor. Esto mejora el soporte para los metadatos en el modelo en forma de atributos de anotación de datos cuando el cuadro de diálogo Agregar vista genera una vista.
Esta es una de las diferencias básicas no mencionadas en comentarios anteriores:
Readonly
propiedad Readonly
funcionará con textbox for y no funcionará con EditorFor
.
@Html.TextBoxFor(model => model.DateSoldOn, new { @readonly = "readonly" })
El código anterior funciona, mientras que al seguir no se puede hacer el control de solo lectura .
@Html.EditorFor(model => model.DateSoldOn, new { @readonly = "readonly" })
Las ventajas de EditorFor
es que su código no está vinculado a un <input type="text"
. Entonces, si decides cambiar algo al aspecto de cómo se renderizan tus cuadros de texto, como envolverlos en un div
, simplemente puedes escribir una plantilla de editor personalizada ( ~/Views/Shared/EditorTemplates/string.cshtml
) y todos tus cuadros de texto en tu aplicación se beneficiará automáticamente de este cambio, mientras que si ha codificado Html.TextBoxFor
tendrá que modificarlo en todas partes. También puede usar Anotaciones de datos para controlar la forma en que se representa.
También hay una ligera diferencia en la salida html para un tipo de datos de cadena.
Html.EditorFor:
<input id="Contact_FirstName" class="text-box single-line" type="text" value="Greg" name="Contact.FirstName">
Html.TextBoxFor:
<input id="Contact_FirstName" type="text" value="Greg" name="Contact.FirstName">
The Html.TextboxFor
siempre crea un cuadro de texto ( <input type="text" ...
).
Mientras que el Editor busca el tipo y la metainformación, y puede representar otro control o una plantilla que usted proporcione.
Por ejemplo, para las propiedades de DateTime, puede crear una plantilla que use jQuery DatePicker.
TextBoxFor : Se representará como el elemento html de entrada de texto correspondiente a la expresión especificada. En palabras simples, siempre se representará como un cuadro de texto de entrada independientemente del tipo de datos de la propiedad que se vincula con el control.
Editor para : este control es poco inteligente. Representa el marcado HTML basado en el tipo de datos de la propiedad. Por ejemplo, supongamos que hay una propiedad booleana en el modelo. Para mostrar esta propiedad en la vista como una casilla de verificación, podemos usar CheckBoxFor o EditorFor. Ambos generarán el mismo marcado.
¿Cuál es la ventaja de usar EditorFor?
Como sabemos, dependiendo del tipo de datos de la propiedad genera el marcado HTML. Entonces supongamos que mañana si cambiamos el tipo de datos de la propiedad en el modelo, no hay necesidad de cambiar nada en la vista. EditorPara el control cambiará el marcado HTML html automáticamente.