2012-08-14 2 views
1

Je suis nouveau sur MVC et je voudrais quelques conseils ici sur la façon de passer des valeurs variables d'un contrôleur à un autre contrôleur. Fondamentalement, ce que je veux accomplir est d'effectuer une authentification de Facebook et après authentification réussie, je devrais obtenir la valeur AccessToken et la valeur de la variable fullpath que je veux la passer à un autre contrôleur pour le traitement ultérieur avec une nouvelle vue. Je ne sais pas si ce que je l'ai fait faire beaucoup de sens:MVC + Valeurs de passage d'un contrôleur à un autre contrôleur

J'ai une méthode ActionResult (simplifiée pour la rendre plus claire) comme ceci:

[HttpPost] 
public ActionResult Index(string facebookUID, string facebookAccessTok) 
{ 
    string fbUID = facebookUID; 
    string fbAcess = facebookAccessTok; 
    var fullpath = ""; 

    string uploadPath = Server.MapPath("~/upload"); 
    fullpath = uploadPath + "\\ProfilePic.png"; 

    return null; 
} 

À mon avis Index:

<script type="text/javascript"> 
    var uid = 0; 
    var accesstoken = ''; 

    function grantPermission() { 
     window.FB.login(function (response) { 
      if (response.authResponse) { 
       uid = response.authResponse.userID; 
       accesstoken = response.authResponse.accessToken; 
       var postData = { facebookUID: uid, facebookAccessTok: accesstoken }; 
       $.ajax({ 
        type: 'POST', 
        data: postData, 
        success: function() { 
         // process the results from the controller action 
         window.location.href = "Publish"; 
        } 
       }); 
      } else { 
       alert('User cancelled login'); 
      } 
     }, { scope: 'publish_stream' }); 
    }; 

dans la vue ci-dessus, je fais une redirection vers un autre appel page « Publier » que son indice contrôleur ActionResult nécessite fbAcess et fullpath valeurs variables pour un traitement ultérieur. S'il vous plaît des conseils comment puis-je transmettre les valeurs.

Répondre

3

Utilisez un redirect:

[HttpPost] 
public ActionResult Index(string facebookUID, string facebookAccessTok) 
{ 
    string fbUID = facebookUID; 
    string fbAcess = facebookAccessTok; 
    var fullpath = ""; 

    string uploadPath = Server.MapPath("~/upload"); 
    fullpath = uploadPath + "\\ProfilePic.png"; 

    return RedirectToAction("Publish", "TheOtherController", new { fbAccess = fbAccess, fullpath = fullpath }); 
} 

public class TheOtherController : Controller 
{ 
    public ActionResult Publish(string fbAccess, string fullpath) 
    { 
     // Do whatever you want 
     // 
    } 
} 

Cela fonctionne si vous utilisez formulaire standard pour soumettre les données à la méthode Index. Si vous voulez garder l'Ajax pour envoyer les données, modifier le code de la manière suivante:

[HttpPost] 
public ActionResult Index(string facebookUID, string facebookAccessTok) 
{ 
    string fbUID = facebookUID; 
    string fbAcess = facebookAccessTok; 
    var fullpath = ""; 

    string uploadPath = Server.MapPath("~/upload"); 
    fullpath = uploadPath + "\\ProfilePic.png"; 

    var redirectUrl = new UrlHelper(Request.RequestContext).Action("Publish", new { fbAcess = fbAcess, fullpath = fullpath }); 
    return Json(new { Url = redirectUrl }); 
} 

Et dans votre code client:

$.ajax({ type: 'POST', 
     data: postData, 
     dataType: 'json', 
     success: function (response) {    
      window.location.href = response.Url; 
     } 
}); 
+0

Merci, cela aide! – k80sg

+0

Juste une autre question, quelle est la différence si j'utilise return Redirect (redirectUrl); au lieu de retourner Json (new {Url = redirectUrl}); parce que ce dernier me donne un "Windows Explorer a cessé de fonctionner" erreur de chargement de la page. Merci. – k80sg

+0

Désolé pour le retard. Pouvez-vous enquêter dans les outils de développement d'IE si vous trouvez la source exacte de l'erreur que vous obtenez? – twoflower

1

sur l'authentification réussie, appelez la méthode suivante

return RedirectToAction("ActionName", "Controller", new {variable1 = value1, variable2 = value2/*...etc*/}); 
Questions connexes