Fel*_*lix 2 asp.net-mvc resx embedded-resource asp.net-mvc-3 asp.net-mvc-4
我有几个ASP.NET MVC3和4个网站.所有站点都使用与库分开的相同资源.资源是.resx文件.我想在这些网站的html中使用这些资源中的图像.我之前没有使用resx文件,因此不确定使用它们的好方法.我认为我可以创建一个服务,从正确的资源文件中提供正确的图像,但我想应该有更好的方法.我的问题是从resx文件中使用这些图像的好方法是什么?将图像存储在resx中可能不是很好吗?
一种简单的方法是向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");
}
Run Code Online (Sandbox Code Playgroud)
现在您应该能够从您的视图中访问它,如下所示:
<img src='@Url.Action("Image", "MyController", new { key = "Image1" })' />
Run Code Online (Sandbox Code Playgroud)
另一种方法(可以仅使用视图完成)是创建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" />
Run Code Online (Sandbox Code Playgroud)
实现这一点的好方法可能是使用Razor帮助程序,以在视图中启用更直接的语法@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)
);
}
Run Code Online (Sandbox Code Playgroud)
注意: .ResX文件的属性应设置如下(与MVC项目一样):
CustomTool为PublicResXFileCodeGeneratorCustom Tool Namespace为资源
| 归档时间: |
|
| 查看次数: |
4373 次 |
| 最近记录: |