使用jquery渲染图像(流对象)

时间:2011-05-17 15:43:27

标签: asp.net-mvc image jquery rendering

只是想知道,如何使用jquery将ajax调用中的action方法返回的图像(流)绑定到图像元素。

的JavaScript

$(document).ready($(function () {
        $(':input').change(function () {

                // object
                var Person = {
                            Name: 'Scott',
                            Address: 'Redmond'
                        };
                // Function for invoking the action method and binding the stream back
                ShowImage(Person);
    });
}));

 function ShowImage(Person) {


        $.ajax({
            url: '/Person/GetPersonImage',
            type: "Post",
            data: JSON.stringify(Person),
            datatype: "json",
            contentType: "application/json; charset=utf-8",
            success: function (data) {

                // idImgPerson is the id of the image tag
                $('#idImgPerson')
                   .attr("src", data);

            },
            error: function () {
                alert('Error');
            }
        });

操作方法

  public FileContentResult GetPersonImage(Person person)
        {

            // Get the image    
            byte[] myByte = SomeCompnent.GetPersonImage(person);
            return File(myByte, "image/png");

        }

问题

Action方法正在返回流,但它没有在页面上呈现。 我在这里错过了一些东西......

感谢您的关注。

1 个答案:

答案 0 :(得分:2)

所以我今天正在研究这个问题并遇到了你的问题,这有助于(和伤害)我。这是我发现的:

  1. 就像Eben提到的那样,你不能拥有json数据类型。但这只是问题的一部分。当你尝试$('#idImgPerson')。attr(“src”,data);在您的代码中,您只需将src属性设置为调用返回的字节执行GetPersonImage()方法。
  2. 我最终使用了部分视图:

    使用标准mvc3模板

    Index.cshtml(摘录):

    <h3>Using jquery ajax with partial views</h3>
    <div id="JqueryAjax">
    <input class="myButton" data-url='@Url.Action("GetImagesPartial","Home")' name="Button1" type="button" value="button" />
    

    创建部分视图,该视图引用提供图像的操作:

    @model string
    
    <div>
    <img  id="penguinsImgActionJquery"  alt="Image Missing" width="100" height="100" 
    src="@Url.Action("GetPersonImage", "Home", new { someString=Model })" />
    <br />
    <label>@Model</label>
    </div>
    

    HomeController包含两种操作方法:

     public ActionResult GetImagesPartial(string someImageName)
        {
    
            return PartialView((object)someImageName);
        }
    
        public FileContentResult GetPersonImage(string someString)
        {
    
            var file = System.Web.HttpContext.Current.Server.MapPath(localImagesPath + "Penguins.jpg");
            var finfo = new FileInfo(file);
            byte[] myByte = Utilities.FileManagement.FileManager.GetByteArrayFromFile(finfo);
            return File(myByte, "image/png");
    
        } 
    

    <强> Jquery的:

    $(document).ready(function () {
    $('.myButton').click(function (e) {
        var bleh = $(this).attr("data-url");
        e.preventDefault();
        someData.runAjaxGet(bleh);
    });
    
    var someData = {
        someValue: "value",
        counter: 1,
    };
    someData.runAjaxGet = function (url) {
        _someData = this;
        $.ajax({
            url: url,
            type: "Get",
            data: { someImageName: "ImageFromJQueryAjaxName" + _someData.counter },
            success: function (data) {
                $('#JqueryAjax').append(data);
                _someData.counter = _someData.counter + 1;
            },
            error: function (req, status) {
                alert(req.readyState + " " + req.status + " " + req.responseText);
            }
        });
    
     };
     });
    
    抱歉,我知道脚本文件中还有一些额外的代码,我试图使用命名空间。无论如何,我想这个想法是你用ajax请求部分视图,它包含图像而不是直接请求图像。