MVC +将值从一个控制器传递到另一个控制器

MVC +将值从一个控制器传递到另一个控制器

问题描述:

我是MVC的新手,希望在此讨论如何将变量值从一个控制器传递到另一个控制器。基本上,我想要实现的是执行Facebook身份验证,并且在成功身份验证后,我应该得到值和完整路径变量值,我想将它传递给另一个控制器以便用新视图进一步处理。我不知道如果我做了什么至今道理:MVC +将值从一个控制器传递到另一个控制器

我有一个ActionResult方法(简化,以使其更清晰)是这样的:

[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; 
} 

在我的索引视图:

<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' }); 
    }; 

在上面的视图中,我做了重定向到另一个页面调用“发布”,其控制器索引ActionResult要求fbAcess全路径用于进一步处理的变量值。请咨询我如何传递价值观。

使用重定向:

[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 
     // 
    } 
} 

如果使用标准格式将数据提交给Index方法这工作。如果你想保持Ajax来发送数据,修改代码以下列方式:

[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 }); 
} 

并在您的客户端代码:

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

感谢,这有助于! – k80sg 2012-08-15 02:05:48

+0

还有一个问题,如果我使用return Redirect(redirectUrl),有什么区别;而不是返回Json(new {Url = redirectUrl});因为后者给我一个“Windows资源管理器已停止工作”页面加载错误。谢谢。 – k80sg 2012-08-15 03:43:10

+0

抱歉,延迟。如果您发现错误的确切来源,您可以在IE的开发人员工具中进行调查吗? – twoflower 2012-08-17 13:04:51

身份验证成功,请拨打以下方法

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