モデルメタデータにアクセスできる html ヘルパーを構築しようとしています。ヘルパーの両方のバージョンが機能する必要があります: 文字列式からとラムダ式から: 例:
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(...)
ますが、それだけでは十分ではありません。
任意の提案をいただければ幸いです。