8

我们如何在redirecttoaction中传递参数和区域

return RedirectToAction("Index","Coupon1", 
                          new {Area = "Admin"},
                          new {id = currentcoupon.Companyid.id});
4

5 回答 5

17
return RedirectToAction("Index", new { id = currentcoupon.Companyid.id, Area="Admin" });
于 2013-02-06T06:51:14.500 回答
11

我没有足够的声誉来添加评论或进行更改,因此我将添加此作为答案。标记的答案不能充分解释答案,并且会使一些人感到困惑。它假定一个默认的家庭控制器,因为它没有明确说明控制器,并且当为该区域定义另一个控制器时,它不会适用于所有情况。重定向有很多重载,但实现既定目标的最简单的重载形式是:

return RedirectToAction("Action", "Controller", new { id=YourId, Area="AreaName" });

这篇文章的其他答案正确地重写了原始代码,但也没有引起您在大多数情况下需要指定控制器的注意。

匿名对象充当 MVC 路由映射器的包,用于映射您可能希望包含在重定向中的所有路由值。

于 2015-01-31T08:00:37.067 回答
7

如果您需要从注册在区域中的控制器重定向到没有区域的控制器,则必须将区域值设置为空,如下所示:

return RedirectToAction("Welcome", "Home", new { Area="" });

如果没有 Area="",您将无法重定向到其他控制器。

于 2015-07-16T09:39:41.147 回答
6

只需将您的参数添加到包含您的区域的同一对象。

return RedirectToAction("Index","Coupon1", 
                        new {Area = "Admin", id = currentcoupon.Companyid.id});
于 2013-02-06T06:47:31.223 回答
2

如果有人已经使用模型来传递数据,例如:

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

您可以Area在模型中包含属性并使用您要使用的任何区域对其进行初始化,
例如:

public class ViewModel
{
    public ViewModel()
    {
        Area = "";
    }

    public string Area { get; set; }
    public string OtherProperty { get; set; }
}

var model = new ViewModel 
{
    Area="myArea",
    OtherProperty="other data"
}

return RedirectToAction("actionName","ControllerName", model);
于 2019-07-26T18:12:23.413 回答