Итак, я работал над этим сегодня и столкнулся с вашим вопросом, который помог (и навредил) мне.Вот что я нашел:
- Как упоминал Эбен, у вас не может быть тип данных 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, которое содержит изображение, а не запрашивает изображение напрямую.