来自不同控制器的RedirectToAction以及参数/路由值不起作用

mem*_*ine 1 asp.net-mvc redirecttoaction

我试图从不同的控制器调用一个动作方法,但它不起作用.它只是跳过RedirectToAction

这是我的代码:

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
        {
            return RedirectToAction("Insert", "Policies", new { tempPolicy = TempPolicy });
        }
Run Code Online (Sandbox Code Playgroud)

请帮忙.

Dar*_*rov 10

重定向时无法发送复杂对象.您必须将每个属性包含为查询字符串参数.这只适用于简单的标量属性.

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
{
    return RedirectToAction("Insert", "Policies", new 
    { 
        id = TempPolicy.Id,
        prop1 = TempPolicy.Prop1,
        prop2 = TempPolicy.Prop2,
        ...
    });
}
Run Code Online (Sandbox Code Playgroud)

如果您具有复杂属性,则还必须包含它们,以便默认模型绑定器能够从查询字符串参数绑定目标操作中的模型:

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
{
    return RedirectToAction("Insert", "Policies", new RouteValueDictionary
    {
        { "id", TempPolicy.Id },
        { "prop1", TempPolicy.Prop1 },
        { "prop2", TempPolicy.Prop2 },
        { "prop3.subprop1", TempPolicy.Prop3.SubProp1 },
        { "prop3.subprop2", TempPolicy.Prop3.SubProp2 },
        ...
    });
}
Run Code Online (Sandbox Code Playgroud)

和你的目标行动:

public ActionResult Insert(TempPoliciesUpload TempPolicy)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

另一种可能性是在重定向之前将此对象保留在后端,然后仅传递id:

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
{
    int id = Repository.Save(TempPolicy);
    return RedirectToAction("Insert", "Policies", new { id = id });
}
Run Code Online (Sandbox Code Playgroud)

并在你的目标行动中:

public ActionResult Insert(int id)
{
    TempPoliciesUpload TempPolicy = Repository.Get(id);
    ...
}
Run Code Online (Sandbox Code Playgroud)