例如:
Html.TextBoxFor(x => x.ModelProperty)
如果我像这样得到一个表达式作为方法参数,我如何从表达式中获得引用的属性?我使用表达式的经验有点有限,根据我所知道的,我不明白它是如何工作的。
发布于 2014-01-17 04:51:12
您可以很容易地获得属性名称,如下所示:
var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
var propName = metadata.PropertyName;
或者,您可以获取属性及其属性:
MemberExpression memberExpression = (MemberExpression) expression.Body;
var member = memberExpression.Member as PropertyInfo;
var attributes = member.GetCustomAttributes();
例如,您可以编写一个简单的方法来生成输入元素,如下所示:
public static MvcHtmlString TextboxForCustom<TModel, TResult>(this HtmlHelper<TModel> html,
Expression<Func<TModel, TResult>> expression)
{
var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
var propName = metadata.PropertyName;
StringBuilder sb = new StringBuilder();
sb.AppendFormat("<input type=\"text\" id=\"{0}\" />", propName);
return MvcHtmlString.Create(sb.ToString());
}
看看这里的my answer吧。
发布于 2014-01-17 04:47:48
我曾经写过自己的EditorFor
,它的定义如下:
public static MvcHtmlString MyHtmlEditorFor<TModel, TProperty>(this HtmlHelper<TModel> h, Expression<Func<TModel, TProperty>> expression)
{
// ...
}
要获取我使用的ModelMetadata类的属性信息:
ModelMetadata m = ModelMetadata.FromLambdaExpression(expression, h.ViewData);
var value = m.Model;
https://stackoverflow.com/questions/21172443
复制相似问题