2012-04-04 24 views
20

Moje metody prób.Jak uzyskać dostęp do ViewBag z JS

Patrząc na JS przez przeglądarkę The @ViewBag.CC to tylko puste ... (brakujące)

 var c = "#" + "@ViewBag.CC"; 
     var d = $("#" + "@ViewBag.CC").value; 
     var e = $("#" + "@ViewBag.CC").val(); 

     var c = "@ViewBag.CC"; 
     var d = $("@ViewBag.CC").value; 
     var e = $("@ViewBag.CC").val(); 

Odpowiedz

48

jeśli używasz maszynki szablon silnik następnie wykonaj następujące

w widoku napisz:

<script> var myJsVariable = '@ViewBag.MyVariable' </script> 

UPDATE: Bardziej właściwe podejście jest zdefiniowanie zestawu konfiguracji na wzorcu układ, na przykład adres bazowy, klucz API Facebooka, podstawowy adres URL Amazon S3, itp. "` `

<head> 
<script> 
    var AppConfig = @Html.Raw(Json.Encode(new { 
    baseUrl: Url.Content("~"), 
    fbApi: "get it from db", 
    awsUrl: "get it from db" 
    })); 
</script> 
</head> 

I można go używać w kodzie JavaScript następująco:

<script> 
    myProduct.fullUrl = AppConfig.awsUrl + myProduct.path; 
    alert(myProduct.fullUrl); 
</script> 
+4

Dlaczego '@' przed '

2

ViewBag jest stronie serwera kod.
Javascript jest po stronie klienta kod.

Nie można uzyskać naprawdę połączyć je.

można zrobić coś takiego:

var x = $('#' + '@(ViewBag.CC)').val(); 

ale będzie analizowany na serwerze, więc nie bardzo je połączyć.

+0

myślę, że masz dodatkowy wspornik? Ive próbował podobny do tego, ale z '' '. – Doomsknight

+0

@Doomsknight.' '' Lub '" 'to to samo. Cóż, czy to działa? – gdoron

+0

W czasie wykonywania widzę 'var c = $ ('#' + '2'). Val();' – Doomsknight

5
<script type="text/javascript"> 
     $(document).ready(function() { 
       showWarning('@ViewBag.Message'); 
     }); 

</script> 

Możesz używać ViewBag.PropertyName w javascript w ten sposób.

+0

Nie jestem pewien czy wht showWarning ma. (nie zrobił nic dla mnie), ale reszta nie zawiera poprawnej wartości. Więc widziałem 'showWarning ('2');' w moim kodzie. – Doomsknight

+1

Użyłem tego kodu, wywołuje on tylko alert i działa poprawnie. możesz zmienić alert ("@ ViewBag.Message"); to będzie działać. – adt

7

try: var cc = @Html.Raw(Json.Encode(ViewBag.CC)

+0

Dzięki! Próbowałem już tego. – Doomsknight

+0

@Doomsknight. I mam nadzieję, że z niego nie skorzystasz. – gdoron

+1

W takim przypadku sprawdź wartość strony serwera ViewBag.CC, ale możesz nie ustawić jej w niektórych przypadkach. – ZeNo

3

można osiągnąć rozwiązanie, wykonując to:

JavaScript:

var myValue = document.getElementById("@(ViewBag.CC)").value; 

lub jeśli chcesz użyć jQuery, a następnie:

jQuery

var myValue = $('#' + '@(ViewBag.CC)').val(); 
+0

Sądzę, że alternatywa javascript może pomóc innym +1. Również myślę, że możesz po prostu napisać '' # @ (ViewBag.CC) '' – Doomsknight

+0

Tak, możesz mieć rację @ Doomsknight, ponieważ świat składa się z wielu rozwiązań :-) –

Powiązane problemy