编辑:感谢 David Ruttka,在查看了 Mvc3 的 RTM 版本中的 LabelExtensions.cs 后,我能够弄清楚。
对于字段名称:string field = ExpressionHelper.GetExpressionText(expression);
对于模型,我需要为 Helper 指定我想要转换的模型 - 其中 TModel:Foo 然后我可以得到模型: BarTypeEnum barType = ((Foo)html.ViewData.Model).BarType;
我已将以下来源更新为对我有用的内容。
/编辑
我正在尝试创建一个类似于 Mvc3 中的 LabelFor 的 html 帮助函数,以根据 Foo.BarType 和从 html 传入的 Foo 字段的名称返回一个字符串值。
在下面的函数 FooLabelFor 中,如何将模型和字段名称传递给函数?
我去寻找 System.Web.Mvc.HtmlLabelFor 的源代码,但在 Mvc3 源代码中找不到它。
//model class
public class Foo
{
public string Bar { get; set; }
public BarTypeEnum BarType { get; set; }
}
//html helper class
public static class HtmlHelpers {
public static string FooLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression) where TModel:Foo
{
BarTypeEnum barType = ExpressionHelper.GetExpressionText(expression);
string field = ((Foo)html.ViewData.Model).BarType;
return GlobalizeText(enumHelper.stringvalue(barType), field);
}
}
//html
@model Foo
<div>@Html.FooLabelFor(m => m.Bar)</div>