Рендеринг изображения (объекта потока) с помощью jquery - PullRequest
0 голосов
/ 17 мая 2011

Просто интересно, как я могу связать изображение (поток), возвращенный методом действия при вызове ajax, с элементом изображения, используя jquery.

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 Ответ

2 голосов
/ 21 апреля 2012

Итак, я работал над этим сегодня и столкнулся с вашим вопросом, который помог (и навредил) мне.Вот что я нашел:

  1. Как упоминал Эбен, у вас не может быть тип данных json.но это только часть проблемы.Когда вы пытаетесь $ ('# idImgPerson'). Attr ("src", data);как и в вашем коде, вы просто установите атрибут src в байтах, возвращаемых вызовом, в методе GetPersonImage ().

В итоге я использовал частичное представление:

Используя стандартный шаблон 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, которое содержит изображение, а не запрашивает изображение напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...