我可以在MVC2 Html Helper中找到包含属性的模型吗?

时间:2011-02-19 01:05:54

标签: asp.net-mvc-2 metadata

我有一个带有以下签名的Html助手:

public static MvcHtmlString UiAutoCompleteForWithId<TModel, TProperty>(this htmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes)

我理解如何获取传入的成员及其元数据的值,但无论如何都要访问包含的模型,或者更具体地说是传入的特定兄弟成员(属性)的值会员名字?

干杯, 马修

编辑:好的我想我可以使用ModelMetadata.FromStringExpression方法做到这一点(有时候你会在看到之前询问它吗?),但我这是最好的解决方法吗?

1 个答案:

答案 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
    ...
}