带参数的MVC redirecttoaction与Area

时间:2013-02-06 06:44:55

标签: asp.net-mvc asp.net-mvc-3

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

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

5 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:8)

我没有足够的声誉来添加评论或进行更改,所以我只是将其添加为答案。明确的答案没有充分解释答案,会让一些人感到困惑。它假设一个默认的家庭控制器,因为它没有明确说明控制器,并且在为该区域定义另一个控制器时不适用于所有情况。 Redirect有许多重载,但实现所述目标的最简单的是:

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

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

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

答案 2 :(得分:5)

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

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

答案 3 :(得分:4)

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

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

没有区域=""您将无法重定向到其他控制器。

答案 4 :(得分:0)

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

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);