我有一个可用的自定义助手。
没有 LinqExpression 的自定义助手(这是有效的)
public static MvcHtmlString Image(this HtmlHelper html, byte[] image)
{
var img = String.Format("data:image/jpg;base64,{0}", Convert.ToBase64String(image));
return new MvcHtmlString("<img src='" + img + "' />");
}
使用上面的自定义帮助程序(有效)
@Html.Image(item.Picture)
我正在尝试使用 LinqExpression 重写相同的自定义助手。
我想出了以下代码,但是 TModel 和 TValue 在 Visual Studio 中没有被识别,而且我也不确定如何将 byte[]
值传递给这个自定义助手,即设置变量 databaseImge
的值。
我在使用自定义助手的 LinqExpression 版本时遇到以下编译时错误。
The type or namespace name 'TModel' could not be found... The type or namespace name 'TValue' could not be found...
问题:我的方法中缺少什么,我如何获得传递给这个助手的 item.Picture
的值?
Custom Helper with LinqExpression(这会产生编译时错误)
public static MvcHtmlString DatabaseImage(this HtmlHelper htmlHelper, Expression<Func<TModel, TValue>> expression)
{
//TModel model = (TModel)helper.ViewContext.ViewData.ModelMetadata.Model;
//var metadata = ModelMetadata.FromLambdaExpression(expression,htmlHelper.ViewData);
var dastabaseImg = expression.Compile().Invoke(htmlHelper.ViewData.Model);
var img = String.Format("data:image/jpg;base64,{0}", Convert.ToBase64String(dastabaseImg));
return new MvcHtmlString("<img src='" + img + "' />");
}
我想使用上面的 LinqExpression 助手,通过使用下面的代码,其中 item.Picture 返回一个 byte[]。
@Html.DatabaseImage(modeItem => item.Picture)
最佳答案
你的方法的签名需要是
public static MvcHtmlString DatabaseImage<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression)
然后你应该使用
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression,htmlHelper.ViewData);
byte[] dastabaseImg = metadata.Model as byte[];
var img = String.Format("data:image/jpg;base64,{0}", Convert.ToBase64String(dastabaseImg));
return new MvcHtmlString("<img src='" + img + "' />");
关于c# - 将没有 LinqExpression 的自定义助手转换为使用 LinqExpression 的自定义助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47713781/