我创建了一个视图jpegImage.cshtml
(不是局部视图),它有jpegImageController
。控制器具有Index
方法,即将图像写入输出流。
在我的主视图testimage.cshtml
中,我将jpegImage
视图称为<img src="jpegImage.cshtml" />
,但未显示任何图像,而如果我按照http://<server>/jpegImage/Index
之类的网址调用视图,则返回图像。
我有什么遗失的吗?
以下是我的代码
-----------JpegImageController.cs----------------
public ActionResult JpegImage()
{
Random random = new Random();
string s = "";
for (int i = 0; i < 6; i++)
s = String.Concat(s, random.Next(10).ToString());
this.Session["CaptchaImageText"] = s;
CaptchaImage ci = new CaptchaImage(this.Session["CaptchaImageText"].ToString(),200, 40, "Century Schoolbook");
this.Response.Clear();
this.Response.ContentType = "image/jpeg";
// Write the image to the response stream in JPEG format.
ci.Image.Save(this.Response.OutputStream, ImageFormat.Jpeg);
// Dispose of the CAPTCHA image object.
ci.Dispose();
return View();
}
CaptchaImage is class which is generating the image
--------------jpegImage.cshtml------------
@Html.BeginForm()
--------testImage.cshtml--------------
< img src="@Url.Content("~/views/JpegImage/JpegImage.cshtml")" alt="Captcha" />
答案 0 :(得分:0)
网络服务器不直接提供jpegImage.cshtml
等视图。这就是为什么当您在图片代码中请求时,您的视图无法投放:
<img src="jpegImage.cshtml" />
相反,视图将作为返回ViewResult
的操作方法的结果呈现。反过来,当您请求路由到操作方法的URL时,将调用操作方法。这就是你的
http://<server>/jpegImage/Index
会返回图像。换句话说,您的图片代码应为
<img src="jpegImage/Index" />
(您可以省略&#34;索引&#34;部分,因为这可能是您路线中的默认配置)。
顺便说一下,如果你需要的只是让你的行动返回一张图片,你根本不需要返回ViewResult
或者拥有一个视图(.cshtml文件)。考虑只返回FileResult
:
public ActionResult Image(string id)
{
/* Generate your CaptchaImage and somehow get hold of a stream */
return base.File(steam, "image/jpeg");
}
由于我不知道您用于生成图像的库,我无法告诉您如何获取Stream
,但您可以自己解决这个问题。
答案 1 :(得分:0)
删除你的jpegImage.cshtml。没有必要和浪费生成。
将 JpegImageController.cs 操作更改为:
public FileResult JpegImage()
{
Random random = new Random();
string s = "";
for (int i = 0; i < 6; i++)
s = String.Concat(s, random.Next(10).ToString());
Session["CaptchaImageText"] = s;
using (CaptchaImage ci = new CaptchaImage(Session["CaptchaImageText"].ToString(), 200, 40, "Century Schoolbook"))
{
// Write the image to a stream in JPEG format.
var output = new MemoryStream();
ci.Image.Save(output, ImageFormat.Jpeg);
return File(output, "image/jpeg");
}
}
在 testImage.cshtml 中,只需使用:
<img src="@Url.Action("JpegImage")" alt="Captcha" />