2010-09-01 7 views
0

Je souhaite utiliser un HtmlHelper MVC similaire à LabelFor.LabelFor htmlhelper MVC2: Comment un propertyName par vide

Lors de l'utilisation réflecteur sur le code de cet auxiliaire, je trouve le code suivant:

public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html,  Expression<Func<TModel, TValue>> expression) 
{ 
    return LabelHelper(html, ModelMetadata.FromLambdaExpression<TModel, TValue>(expression, html.ViewData), ExpressionHelper.GetExpressionText(expression)); 
} 

La fonction LabelHelper est la suivante:

internal static MvcHtmlString LabelHelper(HtmlHelper html, ModelMetadata metadata, string htmlFieldName) 
{ 
    string str = metadata.DisplayName ?? (metadata.PropertyName ?? htmlFieldName.Split(new char[] { '.' }).Last<string>()); 
    if (string.IsNullOrEmpty(str)) 
    { 
     return MvcHtmlString.Empty; 
    } 
    TagBuilder builder = new TagBuilder("label"); 
    builder.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName)); 
    builder.SetInnerText(str); 
    return builder.ToMvcHtmlString(TagRenderMode.Normal); 
} 

Dans la 3 ligne du deuxième exemple de code , il y a une vérification pour voir si le metadata.PropertyName est nul.

Ma question est: Comment un propertyName peut-il être vide dans ce cas? Je l'utilise parce que j'ai un code qui ressemble à ceci, et je veux le tester dans un test unitaire.

+0

La source complète (et tous les commentaires) sont disponibles ici: http://aspnet.codeplex.com/releases/view/41742 – Robaticus

Répondre

1

Il ne peut pas être nul. Mais il peut s'agir d'une chaîne vide, par exemple lorsque metadata.DisplayName est une chaîne vide. Pourquoi utiliser le réflecteur pour arriver à la source?

+0

comment le metadata.Displayname peut-il être une chaîne vide? – Jan

+1

@Jan Si vous regardez le 'DataAnnotationsModelMetadataProvider' vous pouvez voir qu'il définit la propriété' DisplayName' sur une instance d'objet 'DataAnnotationsModelMetadata' en saisissant la valeur d'un' DisplayNameAttribute' d'annotation. Il est possible que vous puissiez utiliser '[DisplayName (" ")]' en tant qu'annotation pour votre propriété. – marcind

+0

Quand je jette un oeil sur le code: metadata.DisplayName peut être "" en réglant le nom d'affichage: Je ne vois pas comment un nom de propriété peut être vide – Jan

Questions connexes