2016-04-09 23 views
0

bir ViewModel liste özelliği atama :MVC6 aşağıdaki özelliğe sahip bir ViewModel sahip bir javascript değişken

public class State 
{ 
    [Key] 
    public int StateId { get; set; } 
    public string ShortName { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<CompanyDetail> CompanyDetails { get; set; } 
} 

Banliyö ve posta kodu özellikleriyle birlikte bir değişken oluşturmaya çalışıyorum Ben bir otomatik tamamlama işlevi için kullanabiliyorum, ancak ben bir modele Model.SuburbsAndPostCodesList atama görünmüyor.

Bu forumdaki diğer soruların yanı sıra here gibi çeşitli javascript seçeneklerini denedim.

O listeyi temsil eden bir JavaScript değişkeni istiyorum ve ben ayarı sadece denedim:

var suburbs = @Model.SuburbAndPostcodesList 

denedim json kullanarak ve Model döngü denedi ama söyleyerek bir hata alıyorum değişken "test" bağlam dışı: Ben de "itmek" ve ".Encode" seçeneğini kullanarak denedi

 var test =[]; 

     @for (int i = 0; i < Model.SuburbAndPostcodesList.Count; i++) 
     { 
      test[i]=... 
     } 

.

Bu dizi ve durum nesnesinin bir javascript değişkenine nasıl atanacağını bilmek ister misiniz?

cevap

0

Kullanım Ajax Çağrı ben sadece ViewModel listesinin çeşitli üyelerine eşdeğer Otomatik tam işlevsellikle Sonunda

$(document).ready(function() { 
      $("#txtPostcodes").keyup(function() { 

       //AutoComplete the Results 
       $("#txtPostcodes").autocomplete({ 
        source: function (request, response) { 
         $.ajax({ 
          type: "POST", 
          contentType: "application/json; charset=utf-8", 
          url: "../ControllerName/ActionName", 
          data: "{'input':'" + document.getElementById('txtPostcodes').value + "'}", 
          dataType: "json", 
          success: function (data) { 
           if (data != null) { 
            var suburbs = data;        
           } 
          }, 
          error: function (result) { 
          } 
         }); 
        } 
       }); 
      } 
      }); 
     }); 
+0

Teşekkür Akshay ama birden AJAX Mesajları yapmak yoktu bu yüzden ViewModel aracılığıyla CSHTML sayfasına satın listesini kullanmak ve verileri işlemek istedik .. ben görünümü modeli dönüştürmek istedik Bunu listelemek ve kaynak olarak kullanmak. – si2030

+0

Bu gönderiye baktım [link] (http://stackoverflow.com/questions/14433406/javascript-how-to-iterate-through-list-of-objects-in-model). Hemen hemen aynı şeyi denedim ve "var öğrenciler = @ Html.Raw (Json.Encode (Model.Students)); Özellikle Json.Encode ... Encode sadece mevcut değil. Ben bu sytax kullanarak onun kadar basit sanıyorum ama benim için "Encode" üzerinde çalışmaz. – si2030

+0

http://stackoverflow.com/questions/12682128/mvc-4-assembly-reference-missing-for-json-encode JSON.Encode'a başvururken hatayla karşılaşıyorsanız –

0

elde etmek ve otomatik tamamlama fonksiyonu için bir javascript çok boyutlu bir dizi oluşturmak için. İşte burada:

var suburbs = [ 
    @for (var i = 0; i < Model.SuburbAndPostcodesList.Count; i++) { 
      <text>{ 
     id: "@Model.SuburbAndPostcodesList[i].SuburbsAndPostcodesId", 
     suburb: "@Model.SuburbAndPostcodesList[i].Suburb", 
     postCode: "@Model.SuburbAndPostcodesList[i].PostCode", 
     state: "@Model.SuburbAndPostcodesList[i].State.ShortName" 
    }@(i == Model.SuburbAndPostcodesList.Count - 1 ? "" : ",")</text> 
     } 
     ]; 

     $("#Suburb").autocomplete({ 
      source: function (req, responseFn) { 
       var re = $.ui.autocomplete.escapeRegex(req.term); 
       var matcher = new RegExp("^" + re, "i"); 
       var a = $.grep(suburbs, function (item, index) { 
        return matcher.test(item.suburb); 
       }); 
       a = $.map(a, function (x) { 
        return { 
         label: x.suburb + " - " + x.postCode, 
         value: x.suburb, 
         suburbDetails: x 
        }; 
       }); 
       responseFn(a); 
      }, 
      select: function (value, data) { 
       if (typeof data == "undefined") { 
       } else { 
        $("#Postcode").val(data.item.suburbDetails.postCode); 
       } 
      }, 
      change: function (event, ui) { 
       if (!ui.item) { 
        $("#Suburb").val(""); 
        $("#Postcode").val(""); 
       } 
      } 
     }); 
İlgili konular