我有一个Controller
,其中有一些操作,如下所示:
[HttpPost]
public ActionResult Create(CreateModel model)
{
if (model.SelectedCustomers.Count > 0 &&
model.SelectedVersions.Count > 0 &&
!string.IsNullOrWhiteSpace(model.ScriptName) &&
!string.IsNullOrWhiteSpace(model.ScriptText))
{
Script script;
...save to database...
return Edit(script.Id); //<---------Return other view here
}
else
{
...
}
}
[HttpGet]
public ActionResult Edit(int? scriptId)
{
return View();
}
运行Create
操作并成功将模型保存到数据库后,我想将用户发送到新创建的脚本的Edit
视图。当我使用上面的代码时,特别是return Edit(script.Id);
,它只会将用户发送回Create
视图而不是Edit
视图。当用户直接导航到Edit
操作时,或通过指向Html.ActionLink
的{{1}}结果时,一切正常。
我做错了什么?
答案 0 :(得分:7)
这不符合你的想法:
IAuthWithRequest
实际上并没有告诉框架去做那个动作。它只是返回方法的返回值。在涉及ASP.NET MVC框架的任何组件之前,纯粹是一个C#问题。什么是回报值:
return Edit(script.Id)
所以前者真的在功能上与后者相同。每当你在ASP.NET MVC中使用return View()
时,框架将通过检查当前被调用的动作来确定该视图,在本例中为return View()
。
您想要的不是返回Create
视图(即使您这样做,在这种情况下,用户仍然在Edit
网址上,造成混乱)。你想要的是返回一个重定向来告诉客户 请求下一步行动:
Create
答案 1 :(得分:4)
您始终可以致电RedirectToAction
并返回该操作结果。这将通知浏览器重定向到不同的操作。
我认为你需要这样的东西:
return RedirectToAction("Edit", new { scriptId = script.Id });
直接调用Edit
与调用方法没什么不同。
答案 2 :(得分:2)
您可以使用输入参数RedirecToAction
进行此操作。
return RedirectToAction("Action", new { id = 12 });
在你的情况下:
return RedirectToAction("Edit", new { scriptId = script.Id });