c# - 将没有 LinqExpression 的自定义助手转换为使用 LinqExpression 的自定义助手

标签 c# asp.net-mvc

我有一个可用的自定义助手。

没有 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/

相关文章:

c# - C# 是否适合集群计算密集型应用程序?

c# - 如何创建类似于 Visual Studio 2008 安装程序的安装程序

c# - 在格式错误的 xml 中转义属性中的内部引号

asp.net-mvc - 可配置的 Application Insights 仪器 key

asp.net - MVC Controller 和 View 是否应该具有 1 对 1 的关系?

c# - 使用任务进行连续轮询

c# - Powershell:在 applicationHost.config 中查找 allowedServerVariables 的脚本检查是否重复

c# - 使用 ASP.Net 5 进行 JwtBearer 身份验证

javascript - JavaScript 中的 3 级引号

c# - 使用 ASP.NET MVC 下载后如何删除文件?