2009-07-18 12 views
1

Actuellement, j'utilise les boîtes de dialogue JQuery UI sur mon site. Cependant, j'ai récemment commencé à utiliser la collection MVC TempData pour les notifications de succès/échec de diverses actions déclenchées par mes boîtes de dialogue. Rien de particulièrement chic ou nouveau. Cependant, il a soulevé un problème que je ne peux pas trouver une solution simple et évidente.Appel de la méthode MVC à partir de la boîte de dialogue JQuery UI sans AJAX

Dans certaines de mes boîtes de dialogue, nous redirigeons vers une nouvelle page sur la soumission réussie des données. Ces données sont soumises à l'aide de jQuery.Post, puis nous effectuons la redirection sur la soumission réussie en utilisant window.location sur la page. Cependant, cela signifie que tout TempData que nous avons défini dans la méthode du contrôleur n'est pas disponible. Fait sens, car il semble exiger le type de retour ActionResult pour gérer cela. Donc, ma question était, en utilisant JQuery UI Dialogues, ce que les gens suggéreraient comme un moyen de soumettre des données au contrôleur SANS utiliser les appels jQuery POST ou AJAX. Évidemment, je peux incorporer un formulaire dans la boîte de dialogue moi-même et l'utiliser, mais il semble à demi-vaincre le point d'utiliser JQuery UI Dialog quand il gère tous les boutons, etc, pour vous.

Peut-être qu'il me manque quelque chose de vraiment évident, mais toute aide serait grandement appréciée. Merci beaucoup.

Mise à jour: Voici la méthode Action entière. NB - ceci est une implémentation, j'ai essayé cela de plusieurs façons. Mais ceci est la mise en œuvre actuelle. Une fois que l'action est appelé, et nous faisons une redirection côté client, le TempData je me suis fixé est comme NULL

[Authorize] 
[AcceptVerbs(HttpVerbs.Post)] 
    public void RetireSelf(int playerKey) 
    { 
     PlayerDTO player = _playerTask.GetPlayer(playerKey); 

     _log.Info("Player retiring themselves from ladder " + player.Name + player.PlayerKey); 

     UserDTO user = _userTask.GetUser(CurrentUserName); 

     if (user.UserKey != player.UserKey) 
     { 
      throw new LadderSecurityException(CurrentUserName + "trying to self retire another player"); 
     } 

     _playerTask.RetirePlayer(playerKey); 
     TempData["notification"] = "You were retired from the ladder."; 
    } 
+0

Vous naviguez: "Cependant, cela signifie que tout TempData que nous avons défini dans la méthode du contrôleur n'est pas disponible, car il semble que cela nécessite le type de retour ActionResult." Pourriez-vous publier le code comment utilisez-vous TempData dans votre action POST? –

+0

Bien sûr, c'est très simple. Dans l'action POST, nous avons cette ligne de code: TempData ["notification"] = "Une notification va ici."; Très simple, mais cela sort toujours comme NULL à la prochaine demande. Ce n'est que si nous appelons la méthode via un appel non-AJAX qu'elle sort comme prévu. – pauldunlop

+0

J'ai mis à jour le post pour inclure l'exemple de code et quelques informations. – pauldunlop

Répondre

1

Vous pouvez retourner JsonResult de l'action RetireSelf:

if(Request.IsAjaxRequest()) 
{ 
    return Json(new { Notification = "You were retired from the ladder."}); 
} 

Le client:

$.ajax({ url: ..., type: "POST", data: ..., dataType: "json", 
    success: function(data) { 
     var notification = data.Notification; 
    } 
}); 
+0

En utilisant cette méthode cependant, comment gérer la redirection vers une autre page dans la même opération? Les données JSON ne seraient-elles pas disponibles sur la page suivante? A moins que je ne le transmette via la chaîne de requête, ce que je veux évidemment éviter de faire. – pauldunlop

+0

Parce que ce que je veux finalement faire est d'effectuer l'action, naviguer hors de la page, et afficher le message de notification. Je peux afficher la notification, je peux gérer la redirection de la page, mais apparemment pas les deux dans une seule opération. – pauldunlop

+0

Vous définissez également TempData sur POST. Sur la prochaine demande, les informations de TempData doivent être présentes. Publiez le code de cette action 'next page' - peut-être le problème dans ce code? Comment lisez-vous TempData dans la 'page suivante'? –

Questions connexes