如何将指定属性的 lambda 表达式转换为表示相同属性的 asp.net mvc 兼容 'name' 字符串?
How can I turn a lambda expression specifying a property into an asp.net mvc compatible 'name' string representing the same?
假设
string value = ViewModelObject.SomeList[n].AnotherList[m].SomeProperty.ToString() //value is '5'
我需要转这个:
Expression<Func<ViewModelObjectType, object>> exp = x => x.SomeList[n].AnotherList[m].SomeProperty
进入
<input type='hidden' name='SomeList[n].AnotherList[m].SomeProperty' value='5'/>
其中 n 和 m 是整数。
我敢打赌以前有人解决过这个问题。我想以类型安全的方式将我的 javascript 控件绑定到我的页面视图模型。我现在正在玩弄表达式类,我可以将属性提取为字符串,但其余部分我还没有弄清楚。
谢谢!
@Html.HiddenFor
助手似乎可以满足您的需求:
@Html.HiddenFor(x => x.SomeList[n].AnotherList[m].SomeProperty)
但是如果由于某种原因你不能依赖框架中已经内置的东西,你总是可以使用 ExpressionHelper.GetExpressionText
方法来滚动你自己的东西,这就是 ASP.NET MVC 内置助手已经在使用:
public static class HtmlExtensions
{
public static string Foo<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> ex)
{
return ExpressionHelper.GetExpressionText(ex);
}
}
然后在您的强类型视图中像这样使用它:
<input type='hidden' name='@Html.Foo(x => x.SomeList[n].AnotherList[m].SomeProperty)' value='5'/>
我不得不使用此礼貌:ExpressionHelper.GetExpressionText(expression) not returning the name of my property
static public string GetExpressionText(LambdaExpression p)
{
if (p.Body.NodeType == ExpressionType.Convert || p.Body.NodeType == ExpressionType.ConvertChecked)
{
p = Expression.Lambda(((UnaryExpression)p.Body).Operand,
p.Parameters);
}
return ExpressionHelper.GetExpressionText(p);
}
我的 NodeType 总是评估为 ExpressionType.Convert
假设
string value = ViewModelObject.SomeList[n].AnotherList[m].SomeProperty.ToString() //value is '5'
我需要转这个:
Expression<Func<ViewModelObjectType, object>> exp = x => x.SomeList[n].AnotherList[m].SomeProperty
进入
<input type='hidden' name='SomeList[n].AnotherList[m].SomeProperty' value='5'/>
其中 n 和 m 是整数。
我敢打赌以前有人解决过这个问题。我想以类型安全的方式将我的 javascript 控件绑定到我的页面视图模型。我现在正在玩弄表达式类,我可以将属性提取为字符串,但其余部分我还没有弄清楚。
谢谢!
@Html.HiddenFor
助手似乎可以满足您的需求:
@Html.HiddenFor(x => x.SomeList[n].AnotherList[m].SomeProperty)
但是如果由于某种原因你不能依赖框架中已经内置的东西,你总是可以使用 ExpressionHelper.GetExpressionText
方法来滚动你自己的东西,这就是 ASP.NET MVC 内置助手已经在使用:
public static class HtmlExtensions
{
public static string Foo<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> ex)
{
return ExpressionHelper.GetExpressionText(ex);
}
}
然后在您的强类型视图中像这样使用它:
<input type='hidden' name='@Html.Foo(x => x.SomeList[n].AnotherList[m].SomeProperty)' value='5'/>
我不得不使用此礼貌:ExpressionHelper.GetExpressionText(expression) not returning the name of my property
static public string GetExpressionText(LambdaExpression p)
{
if (p.Body.NodeType == ExpressionType.Convert || p.Body.NodeType == ExpressionType.ConvertChecked)
{
p = Expression.Lambda(((UnaryExpression)p.Body).Operand,
p.Parameters);
}
return ExpressionHelper.GetExpressionText(p);
}
我的 NodeType 总是评估为 ExpressionType.Convert