2016-07-26 12 views
0

Ich frage mich, ob mir jemand helfen kann. Ich bin neu in Java Script. Ich habe eine Liste, zu der ich bestimmte Werte in ein Array in JavaScript setze. Was ich versuche, ist, einem Benutzer zu erlauben, einen Wert in einer @ Html.DropDownList auszuwählen, dann diese ID im Array zu finden und auf die anderen Eigenschaften zuzugreifen. Der Teil, mit dem ich ein Problem habe, ruft diese Werte aus dem Array ab. Das JavaScript befindet sich auf derselben Seite wie die Dropdown-Liste. Weitere Details können bei Bedarf bereitgestellt werden.Werte innerhalb eines JavaScript-Arrays abrufen

Dropdown

 @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"          
     }) 

Erstellen des Array aus einem ViewBag, als globale var (die eine Liste ist).

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

Unten ist, wo ich das Problem habe, bei dem Versuch, die richtigen Werte

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

Ich versuche, den Wert von StockCode zu erhalten,, Beschreibung, QtyInStock, QtyOnOrder usw.

aktualisieren ich habe auch versucht,

Controler wo GetStockItemsFromDB() eine Liste von Produkten gibt

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

Ansicht

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

Dies ermöglicht es mir, den Inhalt zu sehen, aber ich kann über sie iterieren die Werte I neeed war

+0

Select (@ ViewBag.StockCodeList ... Haben Sie das @ in Ihrer aktuellen Code? – nocturns2

+0

Ja, aber ich habe auch versucht, die Rasierklinge zu entkommen, ohne Erfolg Ich bin ratlos –

Antwort

0

Die Lösung endete bekommen mit. Verwenden Sie nicht die Ansichtstasche und fügen Sie meinem Modell und einigen anderen Änderungen hinzu.

-Controller

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); 

Ansicht in einem versteckten Textfeld Senden

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