web-dev-qa-db-fra.com

Configuration de la valeur dans ViewBag à l'aide de Jquery

Je veux juste demander, existe-t-il un moyen de configurer dynamiquement la valeur de viewbag en utilisant jquery? J'essaie ce code dans mon script,

$(".btn").on("click",function(){
@ViewBag.Id = $(this).attr("id")
});

je ne sais pas si c'est correct mais quand j'essaye d'exécuter mon projet MVC 3, cette erreur apparaît dans mon firebug

Syntax Error
    = $(this).attr("id")

Veuillez aider. Merci

16

Vous vous méprenez sur le fonctionnement du ViewBag.

Lorsque vous travaillez dans MVC et que vous ouvrez une page Web, voici ce qui se passe (grosso modo):

  1. La méthode 'Index' de FooController est exécutée. À la fin, une vue est retournée.
  2. Votre application MVC trouvera alors la vue pour vous et commencera à la rendre en fonction du code HTML qu'elle trouve dans le fichier .aspx associé. Si le programme rencontre des éléments tels que "@ ViewBag.Id", il remplacera essentiellement une chaîne par la valeur ".Id". (C'est un peu plus compliqué que cela, mais pour les besoins de l'argument, il remplace essentiellement une chaîne).
  3. Après le rendu, le document HTML est envoyé à votre navigateur, qui l'affiche ensuite.

Au moment où votre navigateur obtient la page, votre ViewBag est pratiquement hors de portée. En effet, votre application ASP (MVC) utilise le ViewBag, mais Javascript n'a qu'une portée dans le document du navigateur Web (il s'agit du code HTML renvoyé au navigateur par l'application, après le ViewBag est hors de portée. Javascript ne fait pas partie de l'application MVC, seulement la page Web résultante.

Donc, la réponse courte est non, vous ne pouvez pas le faire comme ça. Essayez de le considérer comme un remplacement de chaîne en ligne. Vous pouvez uniquement placer la valeur ViewBag dans la page HTML, et non l'inverse.

Supposons que votre ID soit 5, le code suivant dans le fichier aspx:

$(".btn").on("click",function(){
    @ViewBag.Id = $(this).attr("id")
});

Sera envoyé au navigateur en tant que

$(".btn").on("click",function(){
    5 = $(this).attr("id")
});

Étant donné que votre navigateur ne voit que cette dernière partie, cela n'a tout simplement pas de sens en Javascript. Dans votre cas, avec l'erreur de syntaxe, cela signifie simplement que votre variable n'a pas été initialisée et que vous essayez d'accéder à un null.

42
Flater