使用JavaScript索引变量访问ViewBag数组项

时间:2017-02-16 18:24:28

标签: javascript jquery ajax asp.net-mvc

我正在尝试访问全局javascript变量,以便将其作为数据的一部分传递给我的ajax函数。由于imageIndex在当前上下文中不存在而在如何做到这一点上苦苦挣扎。 使用Javascript:

<script type="text/javascript">
        var imageIndex = 0;
        $(document).ready(function () {
            var imageIndex = 0;

            getImage();

            function getImage() {
                $.ajax({
                    type: "GET",
                    url: '@Url.Action( "GetImage", "Tally" )',
                    data: { imageName: '@(ViewBag.images[imageIndex])', contractID: '@(ViewBag.contractId)' },
                    //dataType: "image/jpeg;base64",
                    success: function (data) {
                        console.log(data);
                        $('#scanImage').attr('src', 'data:image/jpeg;base64,' + data.myImage);
                        $("#imageName").val('@(ViewBag.image)');
                        imageIndex++;
                    },
                    error: function () {
                        console.log("got error");
                    }
                });
            }
        });

    </script>

2 个答案:

答案 0 :(得分:4)

问题

1。从顶部删除您的imageIndex初始化之一。对于所有意图和目的,我会说在你的情况下哪一个并不重要。

2。 imageIndex作为字符串包含在imageName 中,而不是变量的值。

棘手的部分

Razor不会让我们像通常那样简单地连接变量:

imageName: '@(ViewBag.images[' + imageIndex + '])' 

因为我们在服务器端@中包含单引号,所以C#会告诉您有一个溢出的字面值。

解决方案

相反,我们需要从 ViewBag.images数组中填充普通的javascript数组

   var imageArray = @Html.Raw(Json.Encode(@ViewBag.images));
// var imageArray = ["image1", "image2", "image3"];

从那里,我们现在可以使用imageArray[imageIndex]来检索我们正在寻找的值。

$(document).ready(function () {
    var imageIndex = 0;

    //Convert our ViewBag.images into a JS array
    var imageArray = @Html.Raw(Json.Encode(@ViewBag.images));
    getImage();

    function getImage() {
        $.ajax({
            type: "GET",
            url: '@Url.Action( "GetImage", "Tally" )',
            data: { imageName: imageArray[imageIndex], contractID: '@(ViewBag.contractId)' },
            //dataType: "image/jpeg;base64",
            success: function (data) {
                console.log(data);
                $('#scanImage').attr('src', 'data:image/jpeg;base64,' + data.myImage);
                $("#imageName").val('@(ViewBag.image)');
                imageIndex++;
            },
            error: function () {
                console.log("got error");
            }
        });
    }
});

答案 1 :(得分:0)

嗯,我想你在这里弄错了:

imageName: '@(ViewBag.images[imageIndex])'

尝试:imageName: '@(ViewBag.images[' + imageIndex + '])'

另外,为什么要两次声明变量?

<script type="text/javascript">
        var imageIndex = 0; //this
        $(document).ready(function () {
            var imageIndex = 0; //and this?
....