【发布时间】:2015-05-01 23:30:32
【问题描述】:
我的应用程序有一个视图,该视图与位于不同控制器中的各种不同的其他视图链接。我想在这个视图中有一个“返回”按钮,它可以让用户回到上一个视图,无论是哪个视图。
为此,我向视图模型添加了一个字符串属性,我想用它来引用@Html.ActionLink 参数中的原始视图/MyController/MyAction。
链接到这个视图的一些视图属于当前控制器,一些属于其他控制器。这意味着我必须将控制器和动作传递给 ActionLink。
就目前而言,我的代码如下所示:
视图模型:
public class MyViewModel
{
public int MyData { get; set; }
[HiddenInput]
public string ReturnUrl { get; set; }
}
查看:
@Html.ActionLink("Back", Model.ReturnUrl)
这会产生localhost:####/CurrentController/MyController/MyAction的不良结果
当然,我总是可以在 ViewModel 上保存两个字符串(一个用于控制器,一个用于操作)并将它们分别传递给 ActionLink,但如果可能的话,我想避免这种情况。是否存在允许我使用单个返回 url 字符串而不影响控制器的 ActionLink 重载?
另外,是否有可能在控制器端实现相同的功能,f.ex。像这样:
[HttpPost]
public ActionResult DoStuff(MyViewModel model)
{
// do stuff
return RedirectToAction(model.ReturnUrl);
}
【问题讨论】:
-
可能在拥有 Foo 视图的控制器中添加一个具有 JsonResult 值的属性(例如:LastCallerOfFooView),以便有一个集中的状态点来表示调用该视图的最后一个资源。
-
我不会想太多。
ActionLink是为超链接编写 HTML 的快捷方式,无需对控制器和操作进行硬编码。但是由于您已经知道整个 Url,因此您可以简单地使用普通的锚标记。唯一可能失败的情况是,如果您使用不同的路由方案部署了一个新网站,而用户使用过时的链接打开浏览器。
标签: c# asp.net-mvc