Las compilaciones de vista previa de Asp.Net MVC 2.0 proporcionan ayudantes como
Html.EditorFor(c => c.propertyname)
Si el nombre de la propiedad es una cadena, el código anterior representa un texbox.
¿Qué sucede si quiero pasar las propiedades MaxLength y Size al cuadro de texto o mi propia propiedad de clase CSS?
¿Necesito crear una plantilla para cada combinación de tamaño y longitud en mi aplicación? Si es así, eso no hace que las plantillas predeterminadas sean utilizables.
c#
asp.net-mvc
asp.net-mvc-2
Chandmk
fuente
fuente
Resolví esto creando un EditorTemplate llamado String.ascx en mi carpeta / Views / Shared / EditorTemplates:
En mi opinión, uso
¡Funciona como un encanto para mí!
fuente
Ninguna de las respuestas en este o cualquier otro hilo sobre la configuración de atributos HTML para @ Html.EditorFor me ayudó mucho. Sin embargo, encontré una gran respuesta en
Aplicar estilo a un @ Html.EditorFor helper
Utilicé el mismo enfoque y funcionó a la perfección sin escribir mucho código adicional. Tenga en cuenta que se establece el atributo id de la salida html de Html.EditorFor. El código de vista
La propiedad del modelo con anotación de datos y formato de fecha como "dd MMM aaaa"
Funcionó a la perfección sin escribir mucho código adicional. Esta respuesta usa ASP.NET MVC 3 Razor C #.
fuente
Es posible que desee ver la publicación del blog de Kiran Chand , él usa metadatos personalizados en el modelo de vista, como:
Esto se combina con plantillas personalizadas que hacen uso de los metadatos. En mi opinión, un enfoque limpio y simple, pero me gustaría ver este caso de uso común integrado en mvc.
fuente
EditorFor
pasándolo como:new { htmlAttributes: { @class = "yourclass" } }
Me sorprende que nadie haya mencionado pasarlo en "additionalViewData" y leerlo en el otro lado.
Ver (con saltos de línea, para mayor claridad):
Plantilla de editor:
fuente
El problema es que su plantilla puede contener varios elementos HTML, por lo que MVC no sabrá a cuál aplicar su tamaño / clase. Tendrás que definirlo tú mismo.
Haga que su plantilla se derive de su propia clase llamada TextBoxViewModel:
}
En la plantilla puede hacer esto:
En su opinión, sí:
El primer formulario representará la plantilla predeterminada para la cadena. El segundo formulario representará la plantilla personalizada.
La sintaxis alternativa utiliza una interfaz fluida:
}
Tenga en cuenta que en lugar de hacer esto en la vista, también puede hacerlo en el controlador, o mucho mejor en el ViewModel:
También tenga en cuenta que puede hacer que la clase TemplateViewModel base, un terreno común para todas sus plantillas de vista, contendrá soporte básico para atributos / etc.
Pero, en general, creo que MVC v2 necesita una mejor solución. Todavía es Beta, pídelo ;-)
fuente
Creo que usar CSS es el camino a seguir. Ojalá pudiera hacer más con la codificación .NET, como en XAML, pero en el navegador, CSS es el rey.
Site.css
.cshtml
Joe
fuente
EditorFor
plantilla. Estoy usando MVC4 y esto funcionó muy bien.Al igual que en MVC 5, si desea agregar algún atributo, simplemente puede hacerlo
Información encontrada en este blog
fuente
Puede definir atributos para sus propiedades.
Esto se conoce como
System.ComponentModel.DataAnnotations
. Si no puede encontrar elValidationAttribute
que necesita, siempre puede definir atributos personalizados.Saludos cordiales, Carlos
fuente
Puede que esta no sea la solución más hábil, pero es sencilla. Puede escribir una extensión para la clase HtmlHelper.EditorFor. En esa extensión, puede proporcionar un parámetro de opciones que escribirá las opciones en ViewData para el asistente. Aquí hay un código:
Primero, el método de extensión:
A continuación, el objeto de opciones:
Y finalmente, aquí está la línea de la plantilla String.ascx:
Francamente, creo que esto es sencillo y claro para el pobrecito que tiene que mantener su código en el futuro. Y es fácil de ampliar para varios otros bits de información que le gustaría pasar a sus plantillas. Me está funcionando bien hasta ahora en un proyecto en el que estoy tratando de envolver todo lo que puedo en un conjunto de plantillas para ayudar a estandarizar el html circundante, a la http://bradwilson.typepad.com/blog/2009/ 10 / aspnet-mvc-2-templates-part-5-master-page-templates.html .
fuente
Escribí una entrada de blog para responder mi propia pregunta.
Adición de compatibilidad con atributos html para plantillas - ASP.Net MVC 2.0 Beta
fuente
No sé por qué no funciona para Html.EditorFor pero probé TextBoxFor y funcionó para mí.
... y también funciona la validación.
fuente
@class = "className"
En mi práctica, descubrí que es mejor usar EditorTemplates con solo un HtmlHelper, TextBox que es en la mayoría de los casos. Si quiero una plantilla para una estructura html más compleja, escribiré un HtmlHelper por separado.
Dado que podemos colocar todo el objeto ViewData en lugar de htmlAttributes del TextBox. Además podemos escribir algún código de personalización para algunas de las propiedades de ViewData si necesitan un tratamiento especial:
A continuación se muestran los ejemplos de la sintaxis en la vista y el html generado:
fuente
Porque la pregunta es para EditorFor no TextBoxFor, la sugerencia de WEFX no funciona.
Para cambiar cuadros de entrada individuales, puede procesar la salida del método EditorFor:
También es posible cambiar TODOS sus EditorFors, ya que MVC establece la clase de cuadros de texto EditorFor con .text-box , por lo tanto, puede anular este estilo, en su hoja de estilo o en la página.
Además, puede establecer el estilo para
fuente
También tuve problemas con la configuración del ancho de TextBox en MVC3, mientras que la configuración del atributo Clsss funcionó para el control TextArea pero no para el control TextBoxFor o EditorFor control:
Intenté seguir y eso funcionó para mí:
@ Html.TextBoxFor (model => model.Title, new {Class = "textBox", style = "width: 90%;"})
También en este caso las Validaciones están funcionando perfectamente.
fuente
Una forma de evitarlo es tener delegados en el modelo de vista para manejar la impresión de renderizado especial como este. Hice esto para una clase de paginación, expongo una propiedad pública en el modelo
Func<int, string> RenderUrl
para lidiar con ella.Así que defina cómo se escribirá el bit personalizado:
Genere la vista para la
Paging
clase:... y para la
Paging
vista real :Podría verse como un asunto demasiado complicado, pero uso estos buscapersonas en todas partes y no soportaba ver el mismo código repetitivo para renderizarlos.
fuente
ACTUALIZACIÓN: hm, obviamente esto no funcionará porque el modelo se pasa por valor, por lo que los atributos no se conservan; pero dejo esta respuesta como idea.
Otra solución, creo, sería agregar sus propios ayudantes TextBox / etc, que verificarán sus propios atributos en el modelo.
Este es más fácil pero no tan conveniente / flexible.
fuente
Esta es la forma más limpia y elegante / sencilla de obtener una solución aquí.
Publicación de blog brillante y sin exageración al escribir métodos personalizados de extensión / ayuda como un profesor loco.
http://geekswithblogs.net/michelotti/archive/2010/02/05/mvc-2-editor-template-with-datetime.aspx
fuente
Realmente me gustó la respuesta de @tjeerdans que utiliza el EditorTemplate llamado String.ascx en la carpeta / Views / Shared / EditorTemplates. Parece ser la respuesta más sencilla a esta pregunta. Sin embargo, quería una plantilla que usara la sintaxis de Razor. Además, parece que MVC3 usa la plantilla String como predeterminada (consulte la pregunta de StackOverflow " plantilla de visualización mvc para cadenas se usa para enteros "), por lo que debe configurar el modelo como objeto en lugar de cadena. Mi plantilla parece estar funcionando hasta ahora:
fuente
¡¡Lo resolví !!
Para Razor, la sintaxis es:
@Html.TextAreaFor(m=>m.Address, new { style="Width:174px" })
esto ajusta el ancho del área de texto al ancho que definí en el parámetro de estilo.Para ASPx, la sintaxis es:
<%=Html.TextAreaFor(m => m.Description, new { cols = "20", rows = "15", style="Width:174px" })%>
esto hará el truco
fuente