C# 为ActionLink/RedirectToAction组合控制器和动作参数

C# 为ActionLink/RedirectToAction组合控制器和动作参数,c#,asp.net-mvc,C#,Asp.net Mvc,我的应用程序有一个视图,该视图与位于不同控制器中的各种其他视图链接。我希望在这个视图中有一个“后退”按钮,它可以将用户发送回上一个视图,无论是哪一个视图 为此,我在viewmodel中添加了一个string属性,我想用它来引用@Html.ActionLink参数中的原始视图/MyController/MyAction 链接到此视图的一些视图属于当前控制器,一些属于其他控制器。这意味着我必须将控制器和操作传递给ActionLink 目前,我的代码如下所示: [HttpPost] public Ac

我的应用程序有一个视图,该视图与位于不同控制器中的各种其他视图链接。我希望在这个视图中有一个“后退”按钮,它可以将用户发送回上一个视图,无论是哪一个视图

为此,我在viewmodel中添加了一个string属性,我想用它来引用
@Html.ActionLink
参数中的原始视图
/MyController/MyAction

链接到此视图的一些视图属于当前控制器,一些属于其他控制器。这意味着我必须将控制器和操作传递给ActionLink

目前,我的代码如下所示:

[HttpPost]
public ActionResult DoStuff(MyViewModel model)
{
    // do stuff

    return RedirectToAction(model.ReturnUrl);
}
<a href='@Url.Content(Model.ReturnUrl)'>Back</a>
视图模型:

public class MyViewModel
{
    public int MyData { get; set; }

    [HiddenInput]
    public string ReturnUrl { get; set; }
}
视图:

这会产生
localhost:######/CurrentController/MyController/MyAction的不良结果

当然,我总是可以在ViewModel上保存两个字符串(一个用于控制器,一个用于操作),并将它们分别传递给ActionLink,但如果可能的话,我希望避免这样做。是否存在允许我使用单个返回url字符串而不影响控制器的ActionLink重载

此外,是否有可能在控制器端实现相同的功能,即f.ex。像这样:

[HttpPost]
public ActionResult DoStuff(MyViewModel model)
{
    // do stuff

    return RedirectToAction(model.ReturnUrl);
}
<a href='@Url.Content(Model.ReturnUrl)'>Back</a>

您不应该使用
ActionLink
。只需使用锚定标记,如下所示:

[HttpPost]
public ActionResult DoStuff(MyViewModel model)
{
    // do stuff

    return RedirectToAction(model.ReturnUrl);
}
<a href='@Url.Content(Model.ReturnUrl)'>Back</a>

另外,另一种解决方案是在您的模型中有两个属性(
ReturnController
ReturnAction
)。

可能会添加一个具有JsonResult值的属性(例如:LastCallerOfOfooView)在拥有Foo视图的控制器中,有一个集中的状态点,表示调用该视图的最后一个资源。我不会想太多
ActionLink
是为超链接编写HTML的快捷方式,无需对控制器和操作进行硬编码。但是,因为您已经知道整个Url,所以可以简单地使用一个普通的锚标记。唯一可能失败的情况是,当用户使用过期链接打开浏览器时,您使用不同的路由方案部署了一个新网站。