我有一个动作,我从一个锚调用,因此,站点/控制器/动作/ID,其中ID是一个int。

稍后,我需要从控制器重定向到相同的动作。

有什么聪明的办法吗?目前我在tempdata中存储ID,但当你 返回后,按f5再次刷新页面,tempdata消失,页面崩溃。


当前回答

RedirectToAction带参数:

return RedirectToAction("Action","controller", new {@id=id});

其他回答

这一行代码就可以做到:

return Redirect("Action"+id);

您可以将id作为RedirectToAction()方法的routeValues参数的一部分传递。

return RedirectToAction("Action", new { id = 99 });

这将导致重定向到Site/Controller/Action/99。不需要临时或任何类型的视图数据。

Kurt的答案应该是正确的,从我的研究来看,但当我尝试它时,我必须这样做才能让它真正为我工作:

return RedirectToAction( "Main", new RouteValueDictionary( 
    new { controller = controllerName, action = "Main", Id = Id } ) );

如果我没有在RouteValueDictionary中指定控制器和动作,它就不能工作。

同样,当像这样编码时,第一个参数(Action)似乎被忽略了。因此,如果您只是在Dict中指定控制器,并期望第一个参数指定Action,那么它也不起作用。

如果你稍后再来,先试试Kurt的答案,如果你还有问题,试试这个。

如果您的参数恰好是一个复杂的对象,这就解决了问题。关键是RouteValueDictionary构造函数。

return RedirectToAction("Action", new RouteValueDictionary(Model))

如果你碰巧有集合,这就有点棘手了,但另一个答案很好地涵盖了这个问题。

MVC 4的例子…

注意,您并不总是必须传递名为ID的参数

var message = model.UserName + " - thanks for taking yourtime to register on our glorious site. ";
return RedirectToAction("ThankYou", "Account", new { whatever = message });

And,

public ActionResult ThankYou(string whatever) {
        ViewBag.message = whatever;
        return View();
} 

当然,你可以将字符串分配给模型字段,而不是使用ViewBag,如果这是你的偏好。