我有一个带有以下签名的Html助手:
public static MvcHtmlString UiAutoCompleteForWithId<TModel, TProperty>(this htmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes)
我理解如何获取传入的成员及其元数据的值,但无论如何都要访问包含的模型,或者更具体地说是传入的特定兄弟成员(属性)的值会员名字?
干杯, 马修
编辑:好的我想我可以使用ModelMetadata.FromStringExpression方法做到这一点(有时候你会在看到之前询问它吗?),但我这是最好的解决方法吗?
答案 0 :(得分:1)
如果您需要访问兄弟成员的值,则意味着您假设视图模型具有此同级成员。这意味着您的html帮助程序不再需要是通用的。你可以这样做:
public static MvcHtmlString UiAutoCompleteForWithId<TProperty>(
this HtmlHelper<MyViewModel> helper,
Expression<Func<MyViewModel, TProperty>> expression,
object htmlAttributes
)
{
MyViewModel model = helper.ViewData.Model;
var value = model.SomeOtherSiblingProperty;
// TODO: do something with this property
...
}
或者,如果您的视图模型实现了一些包含相关兄弟成员的公共基接口,您可以指定一个通用约束:
public static MvcHtmlString UiAutoCompleteForWithId<TModel, TProperty>(
this HtmlHelper<TModel> helper,
Expression<Func<TModel, TProperty>> expression,
object htmlAttributes
) where TModel: ISomeInterface
{
ISomeInterface model = helper.ViewData.Model;
var value = model.SomeOtherSiblingProperty;
// TODO: do something with this property
...
}