2010-11-03 18 views
5

görünümünde oluştur ASP.NET MVC kullanıyorum ve görüntüleme işleminin bir parçası olarak javascript parçasını oluşturmaya çalışıyorum. Basit bir dizi bir dizi ortaya çıkarmak bir model var ve jQuery kullanarak üzerinde harekete geçebilmem için javascript/json eşdeğer bir dizi oluşturmak istiyorum. Ben görünümünde bunu yapmak için güzel ve özlü bir yolu var mıİşlenmemiş json dizisini ASP.NET MVC

var infoList = [ 
     { 
     Name = "...", 
     ID = 1 
     } , 
     { 
     Name = "...", 
     ID = 2 
     }, 
     .... 
     { 
     Name = "...", 
     ID = N 
     }]; 

:

public class Info { 
    public string Name {get;set;} 
    public int ID {get; set;} 
} 

public class InfoModel{ 
    public Info[] InfoList {get;set;} 
} 

... Ben bir javascript dizi bu gibi bakarak üretmek istiyoruz: Yani şu modeli verilmiş modelin bir json temsili oluşturmasını sağlamaya çalışırsam, tırnakların kodlanması ile ilgili bir sorun var gibi görünüyor, bu yüzden şu anda sadece güzel bir liner ile değiştirmeyi tercih edeceğim bazı spagetti/klasik asp kodu kullanılarak üretilebilir.

DÜZENLEME: Bir denetleyicinin JsonResult döndürmesini istemediğime dikkat edin, görünümümün tek bir kod satırında modelimden oluşturulan bir javascript dizisi içermesinin bir yolunu istiyorum (eğer mümkünse

DÜZENLEME: Yolun bir parçasıyım, ancak kodlama ile mücadele ediyor gibi görünüyor. görünümünde Bu kod:

<script> 
var list = <%: HtmlExtension.ToJson(Model.InfoList) %>; 
</script> 

(toJSON JavaScriptSerializer kullanarak dizeye dönüşüm kapsüller yerde)

bazı kodlama hataları verir:

var info = [{&quot;Name&quot;:&quot;Low End&quot;,&quot;ID&quot;:1}]; 

ben aradığı şeyi değil ..which. Bunu yapabilirim, ancak o kadar parlak görünmüyorsa . Açıklandığı gibi kodlamayı açıkça görmezden gelmeliyim (çıktı kullanıcı değil, aklı başında olabilir, bu yüzden sorun olmayabilir) veya daha az klasik asp yapan başka bir şeyi mi özlüyorum?

InfoModel viewModel; // get this from wherever 
return Json(viewModel); 

MVC ilgili JSON koleksiyon çevirecek:

cevap

5

Bir kodlama sorununuz var gibi görünüyor.

  • yerine <%: ... %> tarzı kullanarak kodunuzu dışarı yazmak için ... Eğer uzantısı oluşturduğunuzda

    1. , bu MvcHtmlString yerine normal string ait döner veya emin olun: Buraya iki seçenek vardır inanıyorum kodlama yapmamak için <%= ... %> kullanın.
  • +0

    EVET! teşekkürler Jonathan, MvcHtmlString için bekliyorum büyü oldu ... –

    +0

    Bu satırı satırı benim jilet HTML dosyasında kullanabildim: MvcHtmlString.Create (Json.Encode (Model)) – bkwdesign

    +0

    Tam olarak. Sonunda bu 'MvcHtmlString' için anahtardır. –

    1

    Evet güzel bir yolu yoktur.

    Bu, JsonResult (yani ham JSON) döndürecektir.

    Bundan sonra var mı?

    Eğer Görünümünde böyle bir şey yapmak istiyorsa:
    <script type="text/javascript> 
        var json = <%: Model.JsonStuff %> 
        // more js 
    </script> 
    

    Sonra Örneğin yukarıdaki çalışmaz. ViewModel'inizi oluştururken el ile seri hale getirmeniz gerekecektir.

    DÜZENLEME

    Burada serileştirip nasıl bir örnek.

    JavaScriptSerializer js = new JavaScriptSerializer(); 
    var listOfInfos; // this will be a collection (e.g List) of Infos. 
    var viewModel = new InfoModel 
           { 
            InfoList = js.Serialize(listOfInfos); 
           }; 
    return View(viewModel); 
    

    sürece listOfInfo en IEnumerable uygular olarak, bir JSON dizi serialize.

    Görüntü modelinizle biraz oynamanız gerekebilir, ancak bu sizi doğru yola koymanız gerekir.

    +0

    İkinci seçeneği arıyorum, jsonu denetime aksiyon döndürme dönüşü olmayan görünümüne dönüştürüyorum. Netleştirmek için soruyu güncelleyeceğim. –

    +0

    @soren enemaerke - güncellememi görün. – RPM1984

    +0

    Takip için teşekkürler, yaklaşımınızı denediniz ve oldukça işe yaramadı. Lütfen güncellenmiş soruma bakın (ToJson, viewmodel'in dışına çıkmak için js.Serialize çağrısını içine alır) –