我四处搜索,阅读了所有与创建强类型助手相关的帖子,但没有一个解决我的问题。问题:
引用简单属性时,一切正常:
@Html.TextBoxGroupFor(x => x.BadgeNumber)
尝试访问模型中不同类的属性时,出现错误:
@Html.TextBoxGroupFor(x => x.Person.BadgeNumber)
错误是:
找不到属性 InspectionEditViewModel.Person.BadgeNumber。
问题线是:
var metaData = ModelMetadataProviders.Current.GetMetadataForProperty(() => Activator.CreateInstance<TModel>(), typeof(TModel), displayName);
我猜这与 GetMetadataForProperty 无法在 InspectionEditViewModel 上找到 BadgeNumber 有关。默认情况下,MVC 的 HTML 助手可以毫无问题地做到这一点。
编辑:
我知道我遗漏了一些东西,这是漫长的一天。这是助手代码:
public static MvcHtmlString TextBoxGroupFor<TModel, TProperty>(this HtmlHelper<TModel> helper,
Expression<Func<TModel, TProperty>> expression)
{
var inputName = ExpressionHelper.GetExpressionText(expression);
var fullHtmlFieldName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(inputName);
var metaData = ModelMetadataProviders.Current.GetMetadataForProperty(() => Activator.CreateInstance<TModel>(), typeof(TModel), fullHtmlFieldName);
var displayName = metaData.DisplayName ?? inputName;
return TextBoxGroup(helper, displayName, inputName);
}