我有一个动作,我从一个锚调用,因此,站点/控制器/动作/ID,其中ID是一个int。
稍后,我需要从控制器重定向到相同的动作。
有什么聪明的办法吗?目前我在tempdata中存储ID,但当你 返回后,按f5再次刷新页面,tempdata消失,页面崩溃。
我有一个动作,我从一个锚调用,因此,站点/控制器/动作/ID,其中ID是一个int。
稍后,我需要从控制器重定向到相同的动作。
有什么聪明的办法吗?目前我在tempdata中存储ID,但当你 返回后,按f5再次刷新页面,tempdata消失,页面崩溃。
当前回答
如果您的参数恰好是一个复杂的对象,这就解决了问题。关键是RouteValueDictionary构造函数。
return RedirectToAction("Action", new RouteValueDictionary(Model))
如果你碰巧有集合,这就有点棘手了,但另一个答案很好地涵盖了这个问题。
其他回答
你也可以发送任何ViewBag, ViewData..像这样
return RedirectToAction("Action", new { Dynamic = ViewBag.Data= "any data" });
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,如果这是你的偏好。
我也有这个问题,如果你在同一个控制器中,一个很好的方法是使用命名参数:
return RedirectToAction(actionName: "Action", routeValues: new { id = 99 });
....
int parameter=Convert.ToInt32(Session["Id"].ToString());
....
return RedirectToAction("ActionName", new { Id = parameter });
这可能是几年前的事了,但无论如何,这也取决于你的全局。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 } ) );