我正在尝试构建一个可以访问模型元数据的 html 助手。我需要两个版本的助手才能工作:来自字符串表达式和来自 lambda 表达式:示例:
public static MvcHtmlString MyLabel(this HtmlHelper html, string htmlFieldName)
{
return LabelHelper(html, htmlFieldName);
}
public static MvcHtmlString MyLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
{
return LabelHelper(html, ExpressionHelper.GetExpressionText(expression));
}
private MvcHtmlString LabelHelper(HtmlHelper html, string htmlFieldName)
{
ModelMetadata m = ModelMetadata.FromStringExpression(htmlFieldName);
// the rest of the code...
}
上面代码的问题是它不适用于复杂类型。例如,如果我的模型看起来像这样:
public class MyViewModel
{
public int Id { get; set; }
public Company Company { get; set; }
}
public class Company
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
}
我的 html 助手将无法读取以下元数据:
@Html.MyLabel("Company.Name")
我可以让它为接受表达式的助手工作,因为它ModelMetadata.FromLambdaExpression(...)
实际上可以很好地处理复杂的对象,但这对我来说还不够。
任何建议表示赞赏。