2011-07-07 11 views
20

Estoy construyendo mi primera plantilla de editor personalizado para un control de área de texto. Mi código hasta ahora es -Cómo obtener el nombre de campo del modelo en la plantilla de editor personalizado

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %> 
<%= Html.TextAreaFor(Model => Model , 2, 30, 
    new { @class = "html", @placeholder = ViewData.ModelMetadata.Watermark }) %> 

No es mucho hasta ahora, pero funciona. Pero necesitamos agregar un campo de contador de caracteres para mostrar el número restante de caracteres que el usuario puede escribir. Sé cómo hacer todo el JavaScript para que esto funcione.

Para mantener el sistema de nombres igual, voy a agregar un control llamado ".charCounter" para mostrar el número de caracteres restantes. Mi problema es que no puedo descifrar la sintaxis correcta para poder recuperar el nombre del campo para el modelo.

La versión final será algo como (JavaScript omitida) -

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %> 
<%= Html.TextAreaFor(Model => Model , 2, 30, 
    new { @class = "html", @placeholder = ViewData.ModelMetadata.Watermark }) %> 
<span class="xxx">Remaining characters - 
    <input readonly type="text" name="<fieldName>.charCounter" /> 
</span> 

Respuesta

29

Usted podría utilizar ViewData.TemplateInfo.HtmlFieldPrefix, así:

<input 
    readonly="readonly" 
    type="text" 
    name="<%= ViewData.TemplateInfo.HtmlFieldPrefix %>.charCounter" 
/> 
+0

¿Qué pasa con el nombre de clase ??? – ConductedClever

2

ViewData.ModelMetadata.PropertyName funciona muy bien en MVC3.

En la maquinilla de afeitar:

<input readonly="readonly" type="text" name="@ViewData.ModelMetadata.PropertyName"> 
15

me encontré con un problema donde el PropertyName no regresaba el Modelo de prefijo por ejemplo Contact.FirstName. Yo era capaz de tener que devolver el Id campo HTML usando esto:

@ViewData.TemplateInfo.GetFullHtmlFieldId("") 

Devuelve: Contact_FirstName

Respectivamente puede devolver el nombre del campo usando:

@ViewData.TemplateInfo.GetFullHtmlFieldName("") 

devoluciones:

Contact.FirstName

0

Obtención de sólo el nombre del modelo/Id (por ejemplo BirthDate):

name = ViewData.ModelMetadata.PropertyName; 

Obtener el nombre del modelo con prefijos para objetos complejos (por ejemplo Identity.Person.BirthDate):

name="@Html.NameFor(m => Model)" 

o

name = ViewData.TemplateInfo.HtmlFieldPrefix; 

Obtener el modelo de la identificación con prefijos para objetos complejos (por ejemplo Identity_Person_BirthDate):

@Html.IdFor(m => Model) 

o

@Html.IdForModel() 
Cuestiones relacionadas