Asp.net mvc 使用参数编译Lambda表达式
我想用助手扩展MVC。假设我想构建一个扩展方法,该方法从模型中获取一个属性并呈现一个段落 我已经写了这段代码,但无法编译。我不知道怎么做:Asp.net mvc 使用参数编译Lambda表达式,asp.net-mvc,lambda,extension-methods,func,Asp.net Mvc,Lambda,Extension Methods,Func,我想用助手扩展MVC。假设我想构建一个扩展方法,该方法从模型中获取一个属性并呈现一个段落 我已经写了这段代码,但无法编译。我不知道怎么做: public static class PExtension { public static string PFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression) wh
public static class PExtension
{
public static string PFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression) where TModel: class
{
var f = expression.Compile();
// won't compile the line below:
string propretyValue = f();
return "<p>" + propretyValue + "</p>";
}
}
谢谢
编辑
错误说明:
*委托“Func”不接受0个参数*
表达式参数指定表达式的返回值为TValue,但您正在尝试将编译表达式的返回值分配给字符串。我猜编译错误是关于“无法将TValue转换为字符串”的
请尝试以下方法:
object propertyValue = f();
return string.Format( "<p>{0}</p>", propertyValue != null ? propertyValue.ToString() : string.Empty );
所以试试这个:
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
object propertyValue = f((TModel)metadata.Model);
return string.Format( "<p>{0}</p>", propertyValue != null ? propertyValue.ToString() : string.Empty );
modelmatadata=modelmatadata.FromLambdaExpression(表达式,htmlhelp.ViewData);
objectpropertyvalue=f((TModel)metadata.Model);
返回string.Format(“{0}”,propertyValue!=null?propertyValue.ToString():string.Empty);
最后,代码如下所示:
public static class PExtension
{
public static MvcHtmlString PFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression) where TModel : class
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
return MvcHtmlString.Create(string.Format("<p>{0}</p>", metadata.Model != null ? metadata.Model.ToString() : string.Empty));
}
}
公共静态类扩展
{
公共静态MvcHtmlString PFor(此HtmlHelper html,表达式),其中TModel:class
{
ModelMetadata=ModelMetadata.FromLambdaExpression(表达式,html.ViewData);
返回MvcHtmlString.Create(string.Format(“{0}”,metadata.Model!=null?metadata.Model.ToString():string.Empty));
}
}
太好了,我会发布一个答案,稍加修改,但你给我指出了正确的方向。谢谢
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
object propertyValue = f((TModel)metadata.Model);
return string.Format( "<p>{0}</p>", propertyValue != null ? propertyValue.ToString() : string.Empty );
public static class PExtension
{
public static MvcHtmlString PFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression) where TModel : class
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
return MvcHtmlString.Create(string.Format("<p>{0}</p>", metadata.Model != null ? metadata.Model.ToString() : string.Empty));
}
}