检索JavaScript数组

时间:2016-07-26 18:24:07

标签: javascript jquery arrays asp.net-mvc razor

我想知道是否有人可以帮助我。我是java脚本的新手。我有一些列表,我将某些值放入JavaScript中的数组中。我想要做的是允许用户在@ Html.DropDownList中选择一个值,然后在数组中找到该id并访问其他其他属性。我遇到问题的部分是从数组中检索这些值。 JavaScript与下拉列表位于同一页面中。如果需要,可以提供更多细节。

DropDownList

     @Html.DropDownList("StockCode", new SelectList(ViewBag.StockCodeList, "Value", "Text"),
     new
        {
            @class = "form-control selectpicker ",
            data_show_subtext = "true",
            data_live_search = "true",
            id = "StockCode",
            name = "StockCode"                                     
        })

从ViewBag(列表)创建数组,作为全局变量

    <script>
    Stockarray = @Html.Raw(
        Json.Encode(
   ((List<GetProducts_Result>)ViewBag.AllStock).Select(stock => new
            {
                StockCode   =   stock.StockCode,
                Description = stock.Description,
                QtyInStock  =  stock.QtyInStock,
                QtyOnOrder  = stock.QtyOnOrder,
                QtyAllocated = stock.QtyAllocated,
                QtyLastStockTake = stock.QtyLastStockTake,
                StoredPrice = stock.StoredPrice,
            })
        )
    );

</script>

下面是我遇到问题的地方,试图获得正确的值

<script>
    function FetchCall() {

        var SelectBox = $("#StockCode").val();

        var Values = selectWhere(Stockarray,'StockCode', SelectBox);


    for (var i=0; i<Values.length; i++)
    {
       var test = Values[i].value;  
       var param_value = i +'='+test;
    }

      alert(param_value.join(', '));
    }

    function selectWhere(data, propertyName, tofind) {
        for (var i = 0; i < data.length; i++) {
            if (data[i][propertyName] == tofind) return data[i];
        }
        return (null);
    }
</script>

我正在尝试获取StockCode,Description,QtyInStock,QtyOnOrder等的值。

更新我也尝试了

GetStockItemsFromDB()返回产品列表

的控制器
 ViewBag.Products = JsonConvert.SerializeObject(GetStockItemsFromDB().Take(2));

视图

    var model = '@Html.Raw(Json.Encode(ViewBag.Products))';
alert(model);

这允许我查看内容,但我可以迭代它们以获得我需要的值

1 个答案:

答案 0 :(得分:0)

解决方案结束了。不使用视图包并添加到我的模型和其他一些更改。

控制器

AllProducts Products = new AllProducts();
Products.Products = new List<StockList>();
List<StockList> Stock = new List<StockList>();
Stock =  (from item in GetStockItemsFromDB()

    select new StockList()
    {
       Description = item.Description,
       QtyOnOrder = item.QtyOnOrder,
       StoredPrice = item.SalesPrice,
       StockCode = item.StockCode
     }).ToList();


Products.Products.AddRange(Stock);
Model.ProductsJson = JsonConvert.SerializeObject(Products);

查看隐藏文本框中的发送

<input type="hidden" id="param3" value="@Model.ProductsJson" />

的Javascript

<script>
    function FetchCall() {

        var SelectBox = $("#StockCode").val();

        var JSONStock = document.getElementById("param3").value;
        var parsed = JSON.parse(JSONStock);

        var tofind = SelectBox;

        var results = selectWhere(parsed, tofind)
        alert(results.StockCode + '    ' + results.Description);

        function selectWhere(parsed, tofind) {
            for (var i = 0; i < parsed.Products.length; i++) {
                if (parsed.Products[i].StockCode == tofind) {
                    return parsed.Products[i];
                }
            }
            return (null);
        }

    }
</script>