web-dev-qa-db-fra.com

Comment accéder aux variables de modèle ou de Viewbag dans une balise de script

Vs'12 asp.net C # MVC4 - Int.Appl.Template EF Code First

Voici mon très simple Script

<script class="TractsScript">

     $('#Add').click(function (e) {

         var val = @ViewBag.ForSection;
         alert(val);

     });
</script>

Comme par exemple, je veux simplement définir une variable dans mon script ou UTILISER un Viewbag. ou Model.

Je n'ai pas pu trouver de réponse dans aucun des forums suivants: StckTrace1 , StackTraceBetterAnswer

D'autres choses que j'ai essayées:

var model = @Html.Raw(Json.Encode(Model))
alert(model.Sections);
alert(@ViewBag.ForSection);
18
Don Thomas Boyle

Vous pouvez le faire de cette façon, en fournissant Json ou toute autre variable:

1) Par exemple, dans le contrôleur, vous pouvez utiliser Json.NET pour fournir Json au ViewBag:

ViewBag.Number = 10;
ViewBag.FooObj = JsonConvert.SerializeObject(new Foo { Text = "Im a foo." });

2) Dans le View, placez le script comme ceci en bas de la page.

<script type="text/javascript">
    var number = parseInt(@ViewBag.Number); //Accessing the number from the ViewBag
    alert("Number is: " + number);
    var model = @Html.Raw(@ViewBag.FooObj); //Accessing the Json Object from ViewBag
    alert("Text is: " + model.Text);
</script> 
23
Fals

Ce que vous avez devrait fonctionner. Cela dépend du type de données que vous définissez, c'est-à-dire s'il s'agit d'une valeur de chaîne, vous devez vous assurer qu'elle est entre guillemets, par exemple.

var val = '@ViewBag.ForSection';

Si c'est un entier, vous devez analyser en un, c'est-à-dire.

var val = parseInt(@ViewBag.ForSection);
22
James

essayez cette méthode

<script type="text/javascript">

    function set(value) {
        return value;
    }

    alert(set(@Html.Raw(Json.Encode(Model.Message)))); // Message set from controller
    alert(set(@Html.Raw(Json.Encode(ViewBag.UrMessage))));

</script>

Merci

4
Thas

Utilisez des guillemets simples ('):

var val = '@ViewBag.ForSection';
alert(val);
2
esi

Quand tu fais ça

var model = @Html.Raw(Json.Encode(Model));

Vous obtenez probablement une chaîne JSON et non un objet JavaScript.

Vous devez l'analyser dans un objet:

var model = JSON.parse(model); //or $.parseJSON() since if jQuery is included
console.log(model.Sections);
0
Johan