如果我发帖到" DoAny"动作并在动作中调用另一个名为" OtherAction"的动作,浏览器中的URL保留在" DoAny"的URL上。行动。 但它应该改为url"其他/行动"在浏览器中也是如此。 如何做到这一点?
[Route("signup/finished")]
public ActionResult DoAny([Deserialize] RegistrationModel rm){
return OtherAction(rm);
}
[Route("other/action")]
public ActionResult OtherAction([Deserialize] RegistrationModel rm){
return View(rm);
}
答案 0 :(得分:1)
您可以返回RedirectResult
[Route("signup/finished")]
public ActionResult DoAny([Deserialize] RegistrationModel rm)
{
return RedirectToActoin("OtherAction");
}
这会向浏览器发送302响应,新的url作为位置标头值,浏览器将对该操作方法发出全新的Http请求。所以你不应该试图传递一个复杂的对象。
如果要传递的视图模型数据是精简简单DTO,则可以将其作为routedata参数传递。框架会将DTO转换为查询字符串并发送它。
return RedirectToActoin("OtherAction",rm);
如果对象很复杂,您应该考虑某种持久性,并在下一个操作方法中将其读回。
您还应该考虑PRG模式。 PRG代表 POST - REDIRECT - GET 。使用此方法,您将在查询字符串中发出具有唯一ID的重定向响应,使用该响应,第二个GET操作方法可以再次查询资源并将某些内容返回到视图。
[Route("signup/finished")]
public ActionResult DoAny([Deserialize] RegistrationModel rm)
{
// to do : Save to db
var newUserId= 101; //replace with the newly inserted id
return RedirectToAction("OtherAction", "Account", new { userId=newUserId} );
}
public ActionResult OtherAction(int userId)
{
// to do : Get data from userId and build rm object
return View(rm);
}
在OtherAction中,您将使用此唯一ID查询数据并获取所需数据。