我在布局页面中有一个按钮,它应该在不同的视图之间导航。
<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());
}
}
枚举按顺序包含ActionNames,因此只需增加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());
请求终止而不重定向。
谢谢!
答案 0 :(得分: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());
}
}
但我建议从(razor)视图在MVC环境中导航的最佳方法是这样的:
<div>
@Html.ActionLink(string linkText, string actionName)
</div>
如果操作位于同一个控制器中。如果不使用此过载:
<div>
@Html.ActionLink(string linkText, string actionName, string controllerName)
</div>
答案 1 :(得分:0)
是的,有一种有效的方法如下:
只需使用
RedirectToAction("ACTION_NAME", "Controller_NAME");