我想使用类似于LabelFor的MVC HtmlHelper。
在此帮助程序的代码上使用反射器时,我找到了以下代码:
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 :(得分:1)
它不能为空。但它可以是一个空字符串,例如metadata.DisplayName
是一个空字符串。