C# 为ActionLink/RedirectToAction组合控制器和动作参数
我的应用程序有一个视图,该视图与位于不同控制器中的各种其他视图链接。我希望在这个视图中有一个“后退”按钮,它可以将用户发送回上一个视图,无论是哪一个视图 为此,我在viewmodel中添加了一个string属性,我想用它来引用C# 为ActionLink/RedirectToAction组合控制器和动作参数,c#,asp.net-mvc,C#,Asp.net Mvc,我的应用程序有一个视图,该视图与位于不同控制器中的各种其他视图链接。我希望在这个视图中有一个“后退”按钮,它可以将用户发送回上一个视图,无论是哪一个视图 为此,我在viewmodel中添加了一个string属性,我想用它来引用@Html.ActionLink参数中的原始视图/MyController/MyAction 链接到此视图的一些视图属于当前控制器,一些属于其他控制器。这意味着我必须将控制器和操作传递给ActionLink 目前,我的代码如下所示: [HttpPost] public Ac
@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,所以可以简单地使用一个普通的锚标记。唯一可能失败的情况是,当用户使用过期链接打开浏览器时,您使用不同的路由方案部署了一个新网站。