Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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
C# 如何从接受参数的控制器返回不同的ActionResult?_C#_Asp.net Mvc - Fatal编程技术网

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决定的。我看到的行为现在有道理了。感谢您的深入解释。