C# 如何从接受参数的控制器返回不同的ActionResult?
我有一个控制器,上面有一些操作,如下所示:C# 如何从接受参数的控制器返回不同的ActionResult?,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个控制器,上面有一些操作,如下所示: [HttpPost] public ActionResult Create(CreateModel model) { if (model.SelectedCustomers.Count > 0 && model.SelectedVersions.Count > 0 && !string.IsNullOrWhiteSpace(model.ScriptName) &
[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();
}
创建操作运行并成功将模型保存到数据库后,我希望将用户发送到新创建脚本的编辑视图。当我使用上面的代码时,特别返回Editscript.Id;它只是将用户发送回创建视图而不是编辑视图。当用户直接导航到编辑操作时,或者通过指向“编辑”的Html.ActionLink的结果导航到编辑操作时,一切都正常工作
我做错了什么?您可以随时调用RedirectToAction并返回该操作结果。这将通知浏览器重定向到不同的操作
我想你需要这样的东西:
return RedirectToAction("Edit", new { scriptId = script.Id });
直接调用Edit与调用方法没有什么不同。您始终可以调用RedirectToAction并返回该操作结果。这将通知浏览器重定向到不同的操作
我想你需要这样的东西:
return RedirectToAction("Edit", new { scriptId = script.Id });
直接调用Edit与调用方法没有什么不同。您可以使用输入参数执行此重定向操作
return RedirectToAction("Action", new { id = 12 });
就你而言:
return RedirectToAction("Edit", new { scriptId = script.Id });
您可以使用输入参数执行此重定向操作
return RedirectToAction("Action", new { id = 12 });
就你而言:
return RedirectToAction("Edit", new { scriptId = script.Id });
这并不是你想象的那样:
return Edit(script.Id)
它实际上并没有告诉框架去做那个动作。它只是返回该方法的返回值。在涉及ASP.NET MVC框架的任何组件之前,这纯粹是一个C问题。返回值是多少
return View()
所以前者在功能上和后者是一样的。无论何时在ASP.NET MVC中使用return视图,框架都会通过检查当前调用的操作来确定该视图,在本例中,该操作是Create
您想要的是即使返回编辑视图,也不返回编辑视图,在这种情况下,用户仍在createurl上,这将导致混淆。您需要返回一个重定向,告诉客户端请求下一个操作:
return RedirectToAction("Edit", new { scriptId = script.Id });
这并不是你想象的那样:
return Edit(script.Id)
它实际上并没有告诉框架去做那个动作。它只是返回该方法的返回值。在涉及ASP.NET MVC框架的任何组件之前,这纯粹是一个C问题。返回值是多少
return View()
所以前者在功能上和后者是一样的。无论何时在ASP.NET MVC中使用return视图,框架都会通过检查当前调用的操作来确定该视图,在本例中,该操作是Create
您想要的是即使返回编辑视图,也不返回编辑视图,在这种情况下,用户仍在createurl上,这将导致混淆。您需要返回一个重定向,告诉客户端请求下一个操作:
return RedirectToAction("Edit", new { scriptId = script.Id });
RedirectToActionEdit,新的{scriptId=script.Id}视图有一个默认值,这意味着它是控制器基类中的方法或扩展方法。如果要更改返回的视图,请查看该方法接受的参数,如view name.RedirectToActionEdit,new{scriptId=script.Id}视图具有默认值,这意味着它是控制器基类中的方法或扩展方法。如果要更改返回的视图,请查看该方法接受的参数,如视图名称。我如何以这种方式发送参数?我如何以这种方式发送参数?这是scriptId而不是idies,添加了您的场景。这是scriptId而不是idies,添加了您的场景。啊,因此,视图的结果由最初调用控制器的方式决定,而不是由实际调用视图的ActionMethod决定。我看到的行为现在有道理了。感谢您的深入解释。啊,视图的结果是由最初调用控制器的方式决定的,而不是由实际调用视图的ActionMethod决定的。我看到的行为现在有道理了。感谢您的深入解释。