2016-07-26 60 views
0

我想知道是否有人可以幫助我。我是新的Java腳本。我有列表,我將某些值放入JavaScript中的數組中。我想要做的是讓用戶在@ Html.DropDownList中選擇一個值,然後在數組中找到該ID並訪問其他其他屬性。我遇到的問題是從數組中檢索這些值。 JavaScript與下拉列表位於同一頁面內。如果需要,可以提供更多細節。檢索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,說明,QtyInStock,QtyOnOrder等價值

更新我也嘗試過

控制器其中GetStockItemsFromDB()返回產品列表

ViewBag.Products = JsonConvert.SerializeObject(GetStockItemsFromDB().Take(2)); 

視圖

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

這讓我看到的內容,但我可以在他們的迭代得到的值我neeed

+0

的SelectList(@ ViewBag.StockCodeList ......你有@在你的實際代碼? – nocturns2

+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>