Estoy tratando de agregar una clase a una entrada.
Esto no está funcionando:
@Html.EditorFor(x => x.Created, new { @class = "date" })
asp.net-mvc
asp.net-mvc-3
razor
usuario137348
fuente
fuente
Respuestas:
Agregar una clase
Html.EditorFor
no tiene sentido ya que dentro de su plantilla podría tener muchas etiquetas diferentes. Por lo tanto, debe asignar la clase dentro de la plantilla del editor:y en la plantilla personalizada:
fuente
A partir de ASP.NET MVC 5.1,
EditorFor
es posible agregar una clase a una (la pregunta original especificaba ASP.NET MVC 3, y la respuesta aceptada sigue siendo la mejor con eso considerado).Consulte: Novedades de ASP.NET MVC 5.1, compatibilidad con Bootstrap para plantillas de editor
fuente
No puede establecer la clase para el EditorFor genérico. Si conoce el editor que desea, puede usarlo de inmediato, allí puede configurar la clase. No necesita crear ninguna plantilla personalizada.
fuente
Puedes usar:
(Al menos con ASP.NET MVC 5, pero no sé cómo fue eso con ASP.NET MVC 3.)
fuente
Tuve el mismo problema frustrante y no quería crear un EditorTemplate que se aplicara a todos los valores de DateTime (hubo momentos en mi interfaz de usuario en los que quería mostrar la hora y no un calendario desplegable de jQuery UI ). En mi investigación, los problemas fundamentales que encontré fueron:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
, pero no me permitiría aplicar la clase personalizada "selector de fecha".Por lo tanto, creé la clase HtmlHelper personalizada que tiene los siguientes beneficios:
Este método reemplaza eso con una cadena vacía.
Y para aquellos que desean conocer la sintaxis de JQuery que busca objetos con la
date-picker
decoración de la clase para luego renderizar el calendario, aquí está:fuente
DateTimePickerFor
y actualizando el campo de fecha del modelo que está representando con[DataType(DataType.Date)]
o[DataType(DataType.DateTime)]
? También puede ponerlo en, digamos, mm / dd / aaaa con.ParseFormats(new string[] { "MM/dd/yyyy" })
(o modificarlo a lo que desee, fácilmente). Si es nulo, el campo se@MyHtmlHelpers.CalenderTextBoxFor(model => model.ExpirationDate)
. ¿Alguna idea sobre cómo implementar esto?Es posible proporcionar una clase u otra información a través de AdditionalViewData: lo uso cuando estoy permitiendo que un usuario cree un formulario basado en campos de base de datos (propertyName, editorType y editorClass).
Según su ejemplo inicial:
y en la plantilla personalizada:
fuente
No hay ninguna
EditorFor
anulación que le permita pasar un objeto anónimo cuyas propiedades de alguna manera se agregarían como atributos en alguna etiqueta, especialmente para las plantillas de editor incorporadas. Debería escribir su propia plantilla de editor personalizada y pasar el valor que desee como datos de vista adicionales.fuente
no permite que se pasen argumentos para el cuadro de texto
Así es como puedes aplicar atributos.
fuente
Usando jQuery, puedes hacerlo fácilmente:
Aquí está tu etiqueta de entrada
Para DropDownlist puedes usar este:
Para la lista desplegable:
fuente
Si bien la pregunta estaba dirigida a MVC 3.0, también encontramos que el problema persiste en MVC 4.0. MVC 5.0 ahora incluye de forma nativa una sobrecarga para htmlAttributes.
Me veo obligado a usar MVC 4.0 en mi lugar de empleo actual y necesitaba agregar una clase CSS para la integración de JQuery. Resolví este problema usando un único método de extensión ...
Método de extensión:
Uso de marcado HTML:
(Asegúrese de incluir el espacio de nombres del método de extensión en la vista de la maquinilla de afeitar)
Explicación: La idea es inyectar en el HTML existente. Opté por analizar el elemento actual usando Linq-to-XML usando
XDocument.Parse()
. Paso los htmlAttributes como tipoobject
.RouteValueDictionary
Utilizo MVC para analizar los atributos html pasados. Combino los atributos donde ya existen o agrego un nuevo atributo si aún no existe.En el caso de que la entrada no sea analizable
XDocument.Parse()
, abandono toda esperanza y devuelvo la cadena de entrada original.Ahora puedo usar el beneficio de DisplayFor (renderizando tipos de datos como la moneda de manera apropiada) pero también tengo la capacidad de especificar clases css (y cualquier otro atributo para el caso). Podría ser útil para agregar atributos como
data-*
, ong-*
(Angular).fuente
Puede crear el mismo comportamiento creando un editor personalizado simple llamado DateTime.cshtml, guardándolo en Views / Shared / EditorTemplates
y en tus puntos de vista
Tenga en cuenta que en mi ejemplo estoy codificando dos clases de CSS y el formato de fecha. Puedes, por supuesto, cambiar eso. También puede hacer lo mismo con otros atributos html, como solo lectura, deshabilitado, etc.
fuente
Utilicé otra solución usando selectores de atributos CSS para obtener lo que necesita.
Indique el atributo HTML que conoce y coloque el estilo relativo que desee.
Como abajo:
fuente
No es necesario crear una plantilla personalizada para MVC 4. Use TextBox en lugar de Edit. Aquí no se admiten atributos html especiales, solo es compatible con MVC 5. TextBox debería ser compatible con MVC 4, no sé sobre otra versión.
fuente
También puedes hacerlo a través de jQuery:
fuente
Solo necesitaba establecer el tamaño de un cuadro de texto en una página. La codificación de atributos en el modelo y la creación de plantillas de editor personalizadas fueron excesivas, por lo que acabo de envolver la llamada @ Html.EditorFor con una etiqueta span que llamó a una clase que especifica el tamaño del cuadro de texto.
Declaración de clase CSS:
Ver código:
fuente
Una mejor manera de aplicar la clase
@Html.EditorFor()
en MVC3 RAzor esAgregará el estilo anterior a su
EditorFor()
Funciona para MVC3.
fuente