带参数的RedirectToAction

我有一个我从锚点调用的动作,即Site/Controller/Action/ID ,其中IDint

稍后我需要从Controller重定向到同一个Action。

有一个聪明的方法来做到这一点? 目前我在tempdata中存储了ID ,但是当你回到f5后再次刷新页面时,tempdata就消失了,页面崩溃了。


#1楼

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

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

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


#2楼

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

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

如果我没有在RouteValueDictionary指定控制器和操作,则它不起作用。

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

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


#3楼

....

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

....

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

#4楼

我也有这个问题,如果你在同一个控制器内,这是一个很好的方法是使用命名参数:

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

#5楼

MVC 4示例......

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

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

和,

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

当然,您可以将字符串分配给模型字段,而不是使用ViewBag(如果这是您的首选项)。


#6楼

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

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

如果你碰巧有收藏品,这会让它变得有点棘手, 但另一个答案很好地涵盖了它


#7楼

带参数的RedirectToAction

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

#8楼

如果您需要重定向到控制器外部的操作,这将起作用。

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

#9楼

值得注意的是,您可以传递多个参数。 id将用于构成URL的一部分,其他任何一个将作为参数传递给一个? 在网址中,将默认为UrlEncoded。

例如

return RedirectToAction("ACTION", "CONTROLLER", new {
           id = 99, otherParam = "Something", anotherParam = "OtherStuff" 
       });

所以网址是:

    /CONTROLLER/ACTION/99?otherParam=Something&anotherParam=OtherStuff

然后,您的控制器可以引用它们:

public ActionResult ACTION(string id, string otherParam, string anotherParam) {
   // Your code
          }

#10楼

//How to use RedirectToAction in MVC

return RedirectToAction("actionName", "ControllerName", routevalue);

return RedirectToAction("Index", "Home", new { id = 2});

#11楼

如果想要显示[httppost]错误消息,那么他/她可以尝试使用传递ID

return RedirectToAction("LogIn", "Security", new { @errorId = 1 });

这样的细节

 public ActionResult LogIn(int? errorId)
        {
            if (errorId > 0)
            {
                ViewBag.Error = "UserName Or Password Invalid !";
            }
            return View();
        }

[Httppost]
public ActionResult LogIn(FormCollection form)
        {
            string user= form["UserId"];
            string password = form["Password"];
            if (user == "admin" && password == "123")
            {
               return RedirectToAction("Index", "Admin");
            }
            else
            {
                return RedirectToAction("LogIn", "Security", new { @errorId = 1 });
            }
}

希望它工作正常。


#12楼

以下是asp.net core 2.1的成功。 它可能适用于其他地方 字典ControllerBase.ControllerContext.RouteData.Values可以在action方法中直接访问和写入。 也许这是其他解决方案中数据的最终目的地。 它还显示默认路由数据的来源。

[Route("/to/{email?}")]
public IActionResult ToAction(string email)
{
    return View("To", email);
}
[Route("/from")]
public IActionResult FromAction()
{
    ControllerContext.RouteData.Values.Add("email", "mike@myemail.com");
    return RedirectToAction(nameof(ToAction));
         // will redirect to /to/mike@myemail.com
}
[Route("/FromAnother/{email?}")]`
public IActionResult FromAnotherAction(string email)
{
    return RedirectToAction(nameof(ToAction));
         // will redirect to /to/<whatever the email param says>
         // no need to specify the route part explicitly
}

#13楼

RedirectToAction("Action", "Controller" ,new { id });

为我工作,不需要做new{id = id}

我正在重定向到同一个控制器内,所以我不需要"Controller"但我不确定当控制器需要作为参数时背后的具体逻辑。


#14楼

这可能是几年前,但无论如何,这也取决于你的Global.asax地图路线,因为你可以添加或编辑参数以适合你想要的。

例如。

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 } ) );
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值