渲染图像没有1-1效果

时间:2012-09-06 08:07:06

标签: c# asp.net-mvc asp.net-mvc-3

我有几个显示图片的页面,他们调用控制器动作,其代码显示在[post of post.Problem是从碎片加载的图像,不加载时刻但首先显示文本,然后显示图像,我尝试了2个更精确的方法来加载图像,但效果相同...所以逐个加载, 请帮助你 当前的代码行动

    public FileContentResult ImageVew(string sourcePath)
    {

        string location = (string)Session["TicketFilePath"] + sourcePath;



        byte[] myByte = System.IO.File.ReadAllBytes(location);

        return File(myByte, "image/jpeg");


        Image i;
        using (MemoryStream ms = new MemoryStream())
        {
            ms.Write(myByte, 0, myByte.Length);
            i = Image.FromStream(ms);
        }
        return File(imageToByteArray(i.GetThumbnailImage(100, 100, () => false, IntPtr.Zero)), "image/png");
    }

    public byte[] imageToByteArray(System.Drawing.Image imageIn)
    {
        MemoryStream ms = new MemoryStream();
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        return ms.ToArray();
    }

此方法的最新版本,但不是结果

    public ActionResult ImageVew(string sourcePath)
    {
        FileInfo fi = new FileInfo((string)Session["TicketFilePath"] + sourcePath);

        return File(fi.FullName, Utilities.MimeType(fi.Name));
    }

    public ActionResult ImageVew(string sourcePath)
    {
        FileInfo fi = new FileInfo((string)Session["TicketFilePath"] + sourcePath);

        byte[] imageFile = System.IO.File.ReadAllBytes(fi.FullName);
        return new FileContentResult(imageFile, Utilities.ImageType(fi.Name));


    }

    public ActionResult ImageVew(string sourcePath)
    {

        FileInfo fi = new FileInfo((string)Session["TicketFilePath"] + sourcePath);
        if (fi.Exists)
        {
            byte[] imageFile = System.IO.File.ReadAllBytes(fi.FullName);

            return File(imageFile, Utilities.ImageType(fi.Name));
        }
        else return null;
    }

图像渲染1 x,图像从网络路径加载...但是1.加载图像兑现,然后播放 请帮助我开发人员

部分f代码然后调用操作 与渲染m cotrol

 private void WriteDataRow(Class item, HtmlTextWriter writer) 
    {
 writer.RenderBeginTag(HtmlTextWriterTag.Td);
        writer.RenderBeginTag(HtmlTextWriterTag.Center);
        writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "20px");
        string src = Url.Action("ImageVew", new { sourcePath = item.Status.Marker });
        writer.AddAttribute(HtmlTextWriterAttribute.Src, src );
        writer.AddAttribute(HtmlTextWriterAttribute.Alt, item.Status.StatusName);
        writer.RenderBeginTag(HtmlTextWriterTag.Img);
        writer.RenderEndTag();
        writer.RenderEndTag();
        writer.RenderEndTag();
}

1 个答案:

答案 0 :(得分:2)

Asp.net mvc将永远不会从同一个用户(实际上是同一个会话)提供多个请求,除非您关闭会话状态或使其只读取该操作。

到控制器或您需要添加的操作

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]

现在这不适用于Cassini(内置于visual studio中的webserver),因为它只能按时提供单个请求,但如果您使用IIS express或IIS进行测试,您应该看到它们使用第一种方法并行加载。 / p>