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;
}
});
答
身份验证成功,请拨打以下方法
return RedirectToAction("ActionName", "Controller", new {variable1 = value1, variable2 = value2/*...etc*/});
感谢,这有助于! – k80sg 2012-08-15 02:05:48
还有一个问题,如果我使用return Redirect(redirectUrl),有什么区别;而不是返回Json(new {Url = redirectUrl});因为后者给我一个“Windows资源管理器已停止工作”页面加载错误。谢谢。 – k80sg 2012-08-15 03:43:10
抱歉,延迟。如果您发现错误的确切来源,您可以在IE的开发人员工具中进行调查吗? – twoflower 2012-08-17 13:04:51