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

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

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


当前回答

值得注意的是,您可以传递多个参数。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
          }

其他回答

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

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

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

RedirectToAction带参数:

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

int parameter=Convert.ToInt32(Session["Id"].ToString());

....

return RedirectToAction("ActionName", new { Id = parameter });

值得注意的是,您可以传递多个参数。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
          }

这一行代码就可以做到:

return Redirect("Action"+id);