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"];
}
你能发布你试图重定向到的操作吗?你能发布你试图重定向到的操作吗?