Я хочу использовать MVC HtmlHelper, аналогичный LabelFor.
При использовании отражателя в коде для этого помощника я обнаружил следующий код:
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 значение null.
Мой вопрос: как свойство propertyName может быть пустым?в этом случае?
Я использую это, потому что у меня есть некоторый код, похожий на этот, и я хочу проверить его в модульном тесте.