2010-09-01 19 views
0

我想使用類似於LabelFor的MVC HtmlHelper。LabelForHtmlHelper MVC2:如何能通過空的propertyName

當使用上這個助手代碼反射器,我發現了以下的代碼:

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)); 
} 

功能LabelHelper如下:

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); 
} 

在第3行的第二代碼示例的,檢查metadata.PropertyName是否爲空。

我的問題是:在這種情況下,如何通過空的propertyName?

我使用這個,因爲我有一些看起來像這樣的代碼,我想在單元測試中測試它。

+0

爲什麼使用反射器來源?完整的源代碼(和任何評論)可在這裏找到:http://aspnet.codeplex.com/releases/view/41742 – Robaticus 2010-09-01 19:14:19

回答

1

它不能爲空。但它可以是一個空字符串,例如metadata.DisplayName是一個空字符串。

+0

metadata.Displayname是一個空字符串? – Jan 2010-09-02 09:49:11

+1

@Jan如果你看看'DataAnnotationsModelMetadataProvider',你可以看到它通過從註解的DisplayNameAttribute中獲取值來在'DataAnnotationsModelMetadata'對象實例上設置'DisplayName'屬性。您可以使用'[DisplayName(「」)]'作爲屬性的註釋。 – marcind 2010-09-02 18:56:24

+0

當我看看代碼:metadata.DisplayName可以通過設置顯示名稱來「:」我看不到propertyname是否可以爲空 – Jan 2010-09-16 09:15:17

相關問題