C# 如何显示模型名称(基本上是LabelFor';的内部文本)?
我希望具有打印模型成员名称/显示名称的功能。这类似于使用C# 如何显示模型名称(基本上是LabelFor';的内部文本)?,c#,asp.net-mvc,C#,Asp.net Mvc,我希望具有打印模型成员名称/显示名称的功能。这类似于使用HtmlHelper.LabelFor,但文本没有包装在标签中。MVC中是否已经内置了一种扩展方法用于此目的?我找不到一个,所以我查看了LabelFor对Reflector的作用,并制作了一个LabelTextFor方法: public static string LabelTextFor<TModel, TValue>(this HtmlHelper<TModel> source, Expression<Fu
HtmlHelper.LabelFor
,但文本没有包装在标签中。MVC中是否已经内置了一种扩展方法用于此目的?我找不到一个,所以我查看了LabelFor
对Reflector的作用,并制作了一个LabelTextFor
方法:
public static string LabelTextFor<TModel, TValue>(this HtmlHelper<TModel> source, Expression<Func<TModel, TValue>> expression)
{
var memberName = ExpressionHelper.GetExpressionText((LambdaExpression)expression);
var metadata = ModelMetadata.FromLambdaExpression(expression, new ViewDataDictionary<TModel>());
return metadata.DisplayName ?? metadata.PropertyName ?? memberName.Split('.').Last();
}
public静态字符串LabelTextFor(此HtmlHelper源代码,表达式)
{
var memberName=ExpressionHelper.GetExpressionText((LambdaExpression)表达式);
var metadata=modelmetada.FromLambdaExpression(表达式,new ViewDataDictionary());
返回metadata.DisplayName??metadata.PropertyName??memberName.Split('.').Last();
}
我想我也应该改变这个方法的名称。感谢您的想法。MVC附带的HTML扩展不是为定制外观而设计的,而是为您的目的而设计的更具“语义”的描述
您想要做的实际上更简单,不需要额外的扩展,而是通过自定义模板。请看一看如何做到这一点 我决定使用我创建的方法。当然,我理解内置扩展的语义。我用一个模型的名字做了一些非常明确的事情,它不需要模板或其他任何东西。无论如何,在看到Brad使用ModelMetadata
提取信息后,我认为我使用当前的扩展方法是安全的。也许改名会更适合我的需要。谢谢