Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 来自不同控制器且参数/路由值不工作的重定向操作_Asp.net Mvc_Redirecttoaction - Fatal编程技术网

Asp.net mvc 来自不同控制器且参数/路由值不工作的重定向操作

Asp.net mvc 来自不同控制器且参数/路由值不工作的重定向操作,asp.net-mvc,redirecttoaction,Asp.net Mvc,Redirecttoaction,我试图从不同的控制器调用一个动作方法,但它不起作用。它只是跳过重定向操作 这是我的密码: public ActionResult sendPolicy(TempPoliciesUpload TempPolicy) { return RedirectToAction("Insert", "Policies", new { tempPolicy = TempPolicy }); } 请提供帮助。从重定向到的控制器中删除该参数,并删除新的{te

我试图从不同的控制器调用一个动作方法,但它不起作用。它只是跳过重定向操作

这是我的密码:

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
        {
            return RedirectToAction("Insert", "Policies", new { tempPolicy = TempPolicy });
        }

请提供帮助。

从重定向到的控制器中删除该参数,并删除新的{templicy=templicy}。看看这是否有效,然后将问题定位到参数

最有可能的情况是,你需要将其转换为你重定向到的动作类型,因此Mark要求你提供该签名或使用该签名,否则,可能会添加引号,我对此表示怀疑,但值得尝试

如果连这都不行,检查你的拼写,这就是为什么我不喜欢魔术弦和爱情的原因——但我也怀疑,命名看起来是否正确


另一种可能的情况是为其他人解决了:

从重定向到的控制器中删除参数,并删除新的{templicy=templicy}。看看这是否有效,然后将问题定位到参数

最有可能的情况是,你需要将其转换为你重定向到的动作类型,因此Mark要求你提供该签名或使用该签名,否则,可能会添加引号,我对此表示怀疑,但值得尝试

如果连这都不行,检查你的拼写,这就是为什么我不喜欢魔术弦和爱情的原因——但我也怀疑,命名看起来是否正确

另一个可能的可能性是为其他人解决的问题:

我希望你已经解决了

public ActionResult Insert(TempPoliciesUpload tempPolicy)
PoliciesController类中的操作方法

请查看RedirectToAction的重载

我希望您有

public ActionResult Insert(TempPoliciesUpload tempPolicy)
PoliciesController类中的操作方法


请查看RedirectToAction的重载

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

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
{
    return RedirectToAction("Insert", "Policies", new 
    { 
        id = TempPolicy.Id,
        prop1 = TempPolicy.Prop1,
        prop2 = TempPolicy.Prop2,
        ...
    });
}
如果您有复杂的属性,则还必须包含这些属性,以便默认模型绑定器能够从查询字符串参数在目标操作中绑定模型:

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 },
        ...
    });
}
以及你的目标行动:

public ActionResult Insert(TempPoliciesUpload TempPolicy)
{
    ...
}
public ActionResult Insert(int id)
{
    TempPoliciesUpload TempPolicy = Repository.Get(id);
    ...
}
另一种可能是在重定向之前将此对象保留在后端,然后仅传递id:

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
{
    int id = Repository.Save(TempPolicy);
    return RedirectToAction("Insert", "Policies", new { id = id });
}
在你的目标行动中:

public ActionResult Insert(TempPoliciesUpload TempPolicy)
{
    ...
}
public ActionResult Insert(int id)
{
    TempPoliciesUpload TempPolicy = Repository.Get(id);
    ...
}

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

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
{
    return RedirectToAction("Insert", "Policies", new 
    { 
        id = TempPolicy.Id,
        prop1 = TempPolicy.Prop1,
        prop2 = TempPolicy.Prop2,
        ...
    });
}
如果您有复杂的属性,则还必须包含这些属性,以便默认模型绑定器能够从查询字符串参数在目标操作中绑定模型:

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 },
        ...
    });
}
以及你的目标行动:

public ActionResult Insert(TempPoliciesUpload TempPolicy)
{
    ...
}
public ActionResult Insert(int id)
{
    TempPoliciesUpload TempPolicy = Repository.Get(id);
    ...
}
另一种可能是在重定向之前将此对象保留在后端,然后仅传递id:

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
{
    int id = Repository.Save(TempPolicy);
    return RedirectToAction("Insert", "Policies", new { id = id });
}
在你的目标行动中:

public ActionResult Insert(TempPoliciesUpload TempPolicy)
{
    ...
}
public ActionResult Insert(int id)
{
    TempPoliciesUpload TempPolicy = Repository.Get(id);
    ...
}

有人尝试过第一种解决复杂对象的方法吗? 我是说这个:

…以及您的目标操作:

公共操作结果插入临时策略上载临时策略 { ... }

我认为RouteValueDictionary不会转换或转换为复杂对象。我认为必须使用序列化


我的解决方案是将参数作为RouteValueDictionary传递,并在目标操作中分别接收每个参数。

有人尝试过第一个处理复杂对象的解决方案吗? 我是说这个:

…以及您的目标操作:

公共操作结果插入临时策略上载临时策略 { ... }

我认为RouteValueDictionary不会转换或转换为复杂对象。我认为必须使用序列化


我的解决方案是将参数作为RouteValueDictionary传递,并在目标操作中分别接收每个参数。

如果需要发送复杂对象,可以尝试从另一个控制器返回视图,如下所示:

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
{
    TempData["Policy"] = TempPolicy;
    return RedirectToAction("Insert", "Policies");
}
公共操作结果发送策略临时策略上载临时策略 { return View~Views/Policies/Insert.cshtml,TempPolicy; }

如果希望此视图发回正确的控制器方法,则需要在“BeginForm”Html帮助程序中指定:

。。。 @使用html.BeginFormInsert,策略 { ... }


这确实不是最佳做法,但这是一种变通方法,您可以使用它,直到修复足够多的应用程序剩余部分,以便正确使用重定向。

如果需要发送复杂对象,您可以尝试从另一个控制器返回视图,如下所示:

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
{
    TempData["Policy"] = TempPolicy;
    return RedirectToAction("Insert", "Policies");
}
公共操作结果发送策略临时策略上载临时策略 { return View~Views/Policies/Insert.cshtml,TempPolicy; }

如果希望此视图发回正确的控制器方法,则需要在“BeginForm”Html帮助程序中指定:

。。。 @使用html.BeginFormInsert,策略 { ... }


这确实不是最佳实践,但这是一种变通方法,您可以使用它,直到您修复足够多的应用程序其余部分,以便正确使用重定向。

对于解耦,@Darin Dimitrov answer适合bes T但是,如果您不希望在URL中传递详细信息,例如,用户无法处理数据,则可以使用短期持久性TempData功能,如下所示:

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
{
    TempData["Policy"] = TempPolicy;
    return RedirectToAction("Insert", "Policies");
}
然后在插入中检索它:

public ActionResult Insert()
{
    TempPoliciesUpload TempPolicy = (TempPoliciesUpload)TempData["Policy"];
}

对于脱钩,Darin Dimitrov的回答最适合。但是,如果您不希望在URL中传递详细信息,例如,用户无法处理数据,则可以使用短期持久性TempData功能,如下所示:

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
{
    TempData["Policy"] = TempPolicy;
    return RedirectToAction("Insert", "Policies");
}
然后在插入中检索它:

public ActionResult Insert()
{
    TempPoliciesUpload TempPolicy = (TempPoliciesUpload)TempData["Policy"];
}

你能发布你试图重定向到的操作吗?你能发布你试图重定向到的操作吗?