2011-06-16 16 views
8

dado esta es mi modeloen # MVC3 ¿hay alguna forma de agregar el atributo de marcador de posición HTML5 utilizando un atributo de Anotaciones de datos?

public class ValidationModel 
{ 
    #region Properties 

    [Display(Prompt = "type a PostCode here")] 
    public string PostCode { get; set; } 

} 

y este es mi punto de vista

@using (Html.BeginForm()) 
{ 
    @Html.LabelFor(m => m.PostCode) 
    @Html.TextBoxFor(m => m.PostCode) 

} 

¿hay una manera de hacer que rinda

<input data-val="true" id="PostCode" name="PostCode" placeholder="type a PostCode here" type="text" value="" /> 

no pude hacer que funcione incluso si desde la documentación http://bit.ly/jVpM8X Puedo ver claramente que la indicación de la visualización debe hacer el trabajo

+0

Visite nuestro sitio http://aspnet.codeplex.com/wikipage?title=ASP.NET%20MVC%204%20RoadMap para solicitarlo. Deja me saber si lo haces. – RickAndMSFT

Respuesta

2

No puedo estar 100% seguro, pero parece que las marcas de agua han llegado al código de metadatos (hay una manera estándar clara de definir una cadena que va con una propiedad) pero no el código de vista como allí todavía no es una forma universal de manejar marcas de agua en el lado del cliente.

Si agregar los atributos manualmente no funcionará, la mejor opción es probablemente crear un nuevo HTML helper Html5TextBoxFor y usarlo en lugar del estándar TextBoxFor.

Dentro de esa ayuda, puede obtener el texto de solicitud con ModelMetadata.FromLambdaExpression y luego llamar a TextBoxFor utilizando un objeto personalizado de atributos html generado a partir de los metadatos.

15
@Html.TextBoxFor(m => m.PostCode, 
    new { placeholder = "type a postcode ..." }) 
+4

sí, lo vi, pero quiero utilizar los atributos de DataAnnotaion (indicación de visualización) en el modelo, no deseo agregar el atributo marcador de posición de la vista – smnbss

9

que necesitaba esta funcionalidad exacta, pero que no quería dar la vuelta y cambiar todos mis EditorFor 's ser algo diferente (tengo un lote de páginas :)).

Para lograr esto, simplemente creé un EditorTemplate para String (puede hacerlo para otros tipos si lo necesita).

Basado en mis del modelo, que yo uso DisplayName, así:

[DisplayName("Client Name")] 
public string ClientName { get; set; } 

La plantilla era simplemente:

@model string 

@Html.TextBoxFor(m => m, new { @placeholder = ViewData.ModelMetadata.DisplayName }) 

Y entonces mi código de llamada se mantuvo exactamente el mismo:

@Html.EditorFor(m => m.FirstName) 

Además, puede tener este trabajo para navegadores no HTML5 con ese código exacto. Todo lo que hice fue agregar una referencia de script al this great jQuery placeholder plugin y todos mis marcadores de posición incluso funcionan en IE6 (!!!!).

0

Aunque puede que no siempre realmente hacer esto, como una prueba de concepto que podría hacer esto:

Modelo:

[Required, Display(Description = "Type your note here...")] 
public string Note { get; set; } 

Vista:

@Html.TextAreaFor(x => x.Note, new { placeholder = ViewData.ModelMetadata 
    .Properties.FirstOrDefault(x => x.PropertyName == "Note")?.Description }) 
1

Cualquier atributo HTML en la maquinilla de afeitar view se puede agregar al HTML helper asignando el valor de propiedad en @html.control usando la palabra clave t t new {} gallina que definen el atributo comenzando con @ símbolo si está utilizando una palabra clave reservada en la maquinilla de afeitar que representa el atributo HTML como class es necesario agregar @ antes de esa palabra, los elementos DOM trata del motor de la maquinilla de afeitar HTML misma manera, por ejemplo:

@Html.TextBoxFor(x => x.Name, new { @class = "form-control", placeholder = "Your Name" }) 
Cuestiones relacionadas