Définir une variable javascript à partir de contrôleur mvc
Est-il possible de définir une variable javascript à partir d'un c# contrôleur? Nous avons une situation où nous remplacer notre page principale avec un muet abattu version qui ne nécessite pas de connexion pour les utilisateurs. Cependant, notre code javascript délai d'expiration de la minuterie fonctionne toujours. Je voudrais méthode du contrôleur qui remplace le maître, pour remplacer le délai d'attente de quelque chose d'énorme.
public dumbDownController()
{
ViewData["MasterPageOverride"] = "~/Views/Shared/_NoLogin.cshtml";
//Somehow reset that timer below from 20 to like 9999. To simulate no timeout.
return View("Cities", model);
}
Alors notre fichier javascript.
tb.sessionTimer = (function () {
var SESSION_TIMEOUT = 20;
var currentTimeoutCounter = SESSION_TIMEOUT * 60;
...
lots more irrelevant to question
...
}
Grande application, donc vous cherchez à peine de modifier le javascript. Souhaitez gérer à partir du contrôleur.
Vous n'êtes pas en nous montrant comment/où la JS minuterie est en fait initialisé, par exemple, avec
Je suis en supposant que votre contrôleur est écrit en JS. Étant donné que, cela n'a guère de sens: "Est-il possible de définir une variable javascript à partir d'un contrôleur?"
Il est écrit en C#. @Madbreaks c'est pourquoi je ne suis pas sûr que c'est possible.
setTimeout
.Je suis en supposant que votre contrôleur est écrit en JS. Étant donné que, cela n'a guère de sens: "Est-il possible de définir une variable javascript à partir d'un contrôleur?"
Il est écrit en C#. @Madbreaks c'est pourquoi je ne suis pas sûr que c'est possible.
OriginalL'auteur Adam | 2012-11-08
Vous devez vous connecter pour publier un commentaire.
Réponse Courte:
Plus Réponse:
Vous ne pouvez pas attribuer directement des variables JavaScript dans le Contrôleur, mais dans la Vue, vous pouvez sortie JavaScript qui peut faire la même chose.
Vous avez besoin pour passer la variable pour l'Afficher en quelque sorte. Pour cet exemple je vais utiliser le
ViewData
objet dictionnaire. Vous pouvez définir un élément dans le Contrôleur:Puis dans la Vue, il est possible de l'utiliser comme:
Qui sera envoyé au navigateur client:
Chaînes besoin d'un peu plus d'attention, car vous avez besoin de les enfermer entre
''
ou""
:Et comme @Graham mentionné dans les commentaires, si la chaîne se trouve être valide JSON (ou tout objet littéral, mais il est très facile à créer JSON), et vous souhaitez l'utiliser comme un objet JavaScript, vous pouvez:
Assurez-vous que la sortie est du JavaScript valide.
Sur une note de bas de page, être prudent avec les caractères spéciaux HTML, comme
<
comme ils sont automatiquement Codé en HTML pour empêcher les attaques XSS, et puisque vous êtes de la sortie JavaScript HTML, cela peut gâcher les choses. Pour éviter cela, vous pouvez utiliserHtml.Raw()
comme:OriginalL'auteur SoonDead
Si
tb
est dans le cadre de votre contrôleur, envisager de substitution de la sessionTimer fonction:OriginalL'auteur Madbreaks
Vous avez deux options (que je comprends):
Créer la variable de viewbag, de données, de tempdata, comme suit:
Ou, le faire via jQuery AJAX:
OriginalL'auteur user1477388