2011-04-01 7 views
6

¿Hay alguna oportunidad en mvc de leer un nombre que se asignará al control html?Cómo leer el nombre del elemento html helper

Por ejemplo yo uso este código:

<div> 
    @Html.LabelFor(x => x.Name) 
    @Html.TextBoxFor(x => x.Name) 
    @Html.ValidationMessageFor(x => x.Name) 
    @Html.HiddenFor(x => x.Id) 

    <div> 
     I want to display here a TextBox name 
    </div> 

</div> 

y quiero obtener un nombre de nombre de entrada. Este código es un fragmento de vista parcial. Nombre del elemento parece los niños [1] .Nombre

+0

¿Cuál sería el uso de ella? ¿Que estás tratando de hacer? – Hallaghan

Respuesta

13

@ Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName ("Nombre") O puede utilizar el método de extensión para HtmlHelper genérico para utilizar esto con expresiones Lambda

public static string GetFullHtmlFieldName<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) 
{ 
    return htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression)); 
} 

El uso sería (Html.GetFullHtmlFieldName(x => x.Name)

+0

Muchas gracias, ¡eso funciona perfecto! : D – nosbor

+0

No olvide marcar como respuesta – archil

+0

@archil No puedo usar la expresión lambda para la variable. no hay sobrecargas por eso. solo se suministra el tipo de cadena. – tugberk

8

supongo que esto es sólo en las versiones más recientes de MVC, pero probablemente podría simplemente utilizar:

@Html.NameFor(x => x.Name) 

Documentación: http://msdn.microsoft.com/en-us/library/hh833703(v=vs.108).aspx

+0

+1 Aweswome, me pregunto cuántas personas crearán una extensión que se burla de la funcionalidad incorporada :) Me alegro de haber visto esto. –

+0

Necesitaba crear mi propia extensión HtmlHelper, y tenía algunos problemas incluso con NameExtensions.NameFor(). Pero el problema que tuve fue porque implementé mi helper y usé una expresión de tipo Expression > en lugar de utilizar un valor de retorno genérico, como: Expression >. Con "objeto", automáticamente se agregaba una expresión "Convertir", que tampoco funcionaba correctamente con NameFor. (Dicho esto, estoy seguro de que todavía hay una razón para manejar el problema Convertir si realmente necesita hacer un molde en la expresión lamdba). –

Cuestiones relacionadas