0

我在布局页面中有一个按钮,它应该在不同的视图之间导航。

<a id="next" href="/Navigation?CurrentPage=@ViewBag.CurrentPage">Next</a>

我在每个页面的 ViewModel 中填充ViewBag.CurrentPage值。

导航控制器在以下控制器中拦截锚点点击 -

public class NavigationController : Controller
{
    public void Index(string CurrentPage)
    {
        PageType currentPageEnum = (PageType)Enum.Parse(typeof(PageType), CurrentPage);
        PageType nextPageEnum = currentPageEnum + 1;
        RedirectToAction(nextPageEnum.ToString());            
    }
}

Enum 按顺序包含 ActionName,因此只需增加 currentPageEnum 值即可找到下一页。

enum PageType
{
    Page1,
    Page2
}

每个动作在 Global.asax.cs 中都有一个映射路由,如下所示 -

routes.MapRoute("Page1", "Page1", new { controller="controller1", action="Page1"});
routes.MapRoute("Page2", "Page2", new { controller="controller2", action="Page2"});

问题: 我无法使用此代码重定向到其他控制器 -

RedirectToAction(nextPageEnum.ToString()); 

请求终止而不重定向。

  1. 我缺少什么信息。
  2. 在 ASP MVC 中是否有更有效的方式在不同视图之间导航

谢谢!

4

2 回答 2

4

添加一个 return 语句并使函数返回一些东西。


public class NavigationController : Controller
{
    public ActionResult Index(string CurrentPage)
    {
        PageType currentPageEnum = (PageType)Enum.Parse(typeof(PageType), CurrentPage);
        PageType nextPageEnum = currentPageEnum + 1;
        return RedirectToAction(nextPageEnum.ToString());            
    }
}

而且由于您指的是映射的路线名称而不是操作,我相信您需要RedirectToRoute而不是RedirectToAction像此代码中的那样:


public class NavigationController : Controller
{
    public ActionResult Index(string CurrentPage)
    {
        PageType currentPageEnum = (PageType)Enum.Parse(typeof(PageType), CurrentPage);
        PageType nextPageEnum = currentPageEnum + 1;
        return RedirectToRoute(nextPageEnum.ToString());            
    }
}

但我建议从(剃刀)视图在 MVC 环境中导航的最佳方式是这样的:

<div>
    @Html.ActionLink(string linkText, string actionName)
</div>

如果动作在同一个控制器中。如果不使用此重载:

<div>
    @Html.ActionLink(string linkText, string actionName, string controllerName)
</div>
于 2012-12-11T12:26:35.840 回答
0

是的,有一种有效的方法如下:

只需使用

   RedirectToAction("ACTION_NAME", "Controller_NAME");
于 2012-12-11T12:30:41.337 回答