我有一个动作,我从一个锚调用,因此,站点/控制器/动作/ID,其中ID是一个int。
稍后,我需要从控制器重定向到相同的动作。
有什么聪明的办法吗?目前我在tempdata中存储ID,但当你 返回后,按f5再次刷新页面,tempdata消失,页面崩溃。
我有一个动作,我从一个锚调用,因此,站点/控制器/动作/ID,其中ID是一个int。
稍后,我需要从控制器重定向到相同的动作。
有什么聪明的办法吗?目前我在tempdata中存储ID,但当你 返回后,按f5再次刷新页面,tempdata消失,页面崩溃。
当前回答
Kurt的答案应该是正确的,从我的研究来看,但当我尝试它时,我必须这样做才能让它真正为我工作:
return RedirectToAction( "Main", new RouteValueDictionary(
new { controller = controllerName, action = "Main", Id = Id } ) );
如果我没有在RouteValueDictionary中指定控制器和动作,它就不能工作。
同样,当像这样编码时,第一个参数(Action)似乎被忽略了。因此,如果您只是在Dict中指定控制器,并期望第一个参数指定Action,那么它也不起作用。
如果你稍后再来,先试试Kurt的答案,如果你还有问题,试试这个。
其他回答
值得注意的是,您可以传递多个参数。id将用来构成URL的一部分,任何其他将通过参数后?在url中,并将UrlEncoded为默认值。
e.g.
return RedirectToAction("ACTION", "CONTROLLER", new {
id = 99, otherParam = "Something", anotherParam = "OtherStuff"
});
所以url会是:
/CONTROLLER/ACTION/99?otherParam=Something&anotherParam=OtherStuff
这些可以被你的控制器引用:
public ActionResult ACTION(string id, string otherParam, string anotherParam) {
// Your code
}
RedirectToAction带参数:
return RedirectToAction("Action","controller", new {@id=id});
这可能是几年前的事了,但无论如何,这也取决于你的全局。Asax映射路径,因为你可以添加或编辑参数,以适应你想要的。
eg.
Global.asax
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
//new { controller = "Home", action = "Index", id = UrlParameter.Optional
new { controller = "Home", action = "Index", id = UrlParameter.Optional,
extraParam = UrlParameter.Optional // extra parameter you might need
});
}
然后你需要传递的参数将更改为:
return RedirectToAction( "Main", new RouteValueDictionary(
new { controller = controllerName, action = "Main", Id = Id, extraParam = someVariable } ) );
//How to use RedirectToAction in MVC
return RedirectToAction("actionName", "ControllerName", routevalue);
例子
return RedirectToAction("Index", "Home", new { id = 2});
Kurt的答案应该是正确的,从我的研究来看,但当我尝试它时,我必须这样做才能让它真正为我工作:
return RedirectToAction( "Main", new RouteValueDictionary(
new { controller = controllerName, action = "Main", Id = Id } ) );
如果我没有在RouteValueDictionary中指定控制器和动作,它就不能工作。
同样,当像这样编码时,第一个参数(Action)似乎被忽略了。因此,如果您只是在Dict中指定控制器,并期望第一个参数指定Action,那么它也不起作用。
如果你稍后再来,先试试Kurt的答案,如果你还有问题,试试这个。