asp.net-mvc - 如何利用MVC中的常用图像资源

标签 asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 embedded-resource resx

我有几个 ASP.NET MVC3 和 4 网站。所有站点都使用独立于库的相同资源。资源是 .resx 文件。 我想在这些网站的 html 中使用这些资源中的图像。 我之前没有使用过 resx 文件,所以不确定使用它们的好方法是什么。 我认为我可能会创建一个服务来从正确的资源文件中提供正确的图像,但我想应该有更好的方法。 我的问题是使用 resx 文件中的这些图像的好方法是什么,并且将图像存储在 resx 中可能并不是很好?

最佳答案

实现此目的的一种简单方法是向 Controller 添加一个 FileStreamResult 操作,该操作应根据资源键返回图像。

public FileStreamResult Image(string key)
{
    var bitmap = (Bitmap)Resources.Images.ResourceManager.GetObject(key);
    MemoryStream stream = new MemoryStream();
    bitmap.Save(stream, ImageFormat.Png);
    stream.Seek(0, SeekOrigin.Begin);
    return new FileStreamResult(stream, "image/png");
}

现在您应该能够从您的 View 中访问它,如下所示:

<img src='@Url.Action("Image", "MyController", new { key = "Image1" })' />

另一种方法(仅使用 View 即可完成)是创建一个 Base 64 编码字符串。

@{
    var stream = new MemoryStream();
    var bitmap = Resources.Images.ResourceManager.GetObject("Image1") as System.Drawing.Bitmap;
    bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
    stream.Seek(0, SeekOrigin.Begin);
    string base64 = Convert.ToBase64String(stream.ToArray());
}

<img src="data:image/gif;base64,@base64" />

实现这一点的一个好方法可能是使用 Razor 助手,在 View 中启用更简单的语法@Html.GetImageFor(Resources.Images.Image1, "alt")

public static MvcHtmlString GetImageFor(this HtmlHelper helper, Bitmap bitmap, string AltText = "")
{
    MemoryStream stream = new MemoryStream();
    bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
    stream.Seek(0, SeekOrigin.Begin);
    string base64 = Convert.ToBase64String(stream.ToArray());

    return new MvcHtmlString(
        string.Format("<img src='data:image/gif;base64,{0}' alt='{1}' />",
            base64, AltText)
    );
}

<子> 注意: .ResX 文件的属性应设置如下(与 MVC 项目的正常情况相同):

  • CustomTool 设置为 PublicResXFileCodeGenerator
  • 自定义工具命名空间设置为资源

关于asp.net-mvc - 如何利用MVC中的常用图像资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12523098/

相关文章:

c# - 在不使用查询字符串的情况下在 ASP.NET MVC 应用程序中移动时如何保持 Sharepoint 上下文?

c# - 如何在 asp.net mvc 的 Controller 中为特定用户提供操作方法的访问权限

c# - JQuery 为 MVC Post 设置隐藏输入

asp.net - 了解 ASP.NET MVC 防伪保护

c# - MVC 中的异常 - 3 View 无法对空引用执行运行时绑定(bind)

c# - POST 和 GET 方法可以进入不同的 View 吗?

asp.net - 如何在 MVC4 中将对象添加到缓存并从缓存中访问数据?

asp.net-mvc - 在 Asp.Net Core 1 (MVC6) 和 MVC 5 应用程序之间共享身份验证 cookie

asp.net-mvc - 具有多个应用程序的ASP.NET Identity

asp.net - 如何使用 HTML.ActionLInk 构建嵌套路由 url?