我想重定向到同一个控制器中的另一个动作并传递一个参数值。我有这段代码:
public ActionResult Index()
{
}
public ActionResult SomeAction()
{
if (isFailed)
{
// Redirect to Index Action with isFailed parameter so that some message gets displayed on Index page.
}
}
我读过关于使用TempData
但我的会话是只读的(出于某种目的)因此,如果我将数据保存在TempData
SomeAction
中,那么它自{{1}在TempData
操作中为空。
我尝试的另一件事是在Index
RedirectToAction("Index","Test", new { param = isFailed})
语句中使用return
。这有效,我可以使用SomeAction
在param
操作中访问Index
但问题是,现在该网址变为Request.QueryString['param']
,我希望它为/AreaName?param=true
。
这是我的路线图:
/AreaName/Test/
我使用MyJS.js中的“帖子”向 context.MapRoute(
"default",
"AreaName/{controller}/{action}/{param}",
new { controller="Test", action = "Index", param=UrlParameter.Optional },
);
提交表单。
有没有替代/解决方法来执行此操作?简而言之,我想要这三件事:
SomeAction
操作。Index
的值从param
传递给SomeAction
。Index
答案 0 :(得分:1)
试试这个
public ActionResult Index(Datatype param)
{
}
public ActionResult SomeAction()
{
if (isFailed)
{
return RedirectToAction("Index" , "Home",new{param= value });
}
return View();
}
答案 1 :(得分:0)
Index
操作。使用return RedirectToAction("Index","Home");
SomeAction
传递给Index
。您可以使用TempData对象。
TempData属性值存储在会话状态中。在设置TempDataDictionary值之后调用的任何操作方法都可以从对象获取值,然后处理或显示它们。 TempData的值一直存在,直到读取或会话超时为止。
您可以按照以下方式执行此操作:
public ActionResult Index()
{
//you can access TempData here.
}
public ActionResult SomeAction()
{
if (isFailed)
{
TempData["Failure"] = "Oops, Error"; //store to TempData
return RedirectToAction("Index" , "Home");
}
return View();
}
This MSDN article解释了这一切。
http://localhost/AreaName/Test/
您可以在RouteConfig.cs
context.MapRoute(
"default",
"AreaName/Test/",
new { area = "AreaName" controller="Test", action = "Index"},
);