首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将请求重定向到不同的控制器

将请求重定向到不同的控制器
EN

Stack Overflow用户
提问于 2012-12-11 12:25:08
回答 2查看 194关注 0票数 0

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

代码语言:javascript
运行
复制
<a id="next" href="/Navigation?CurrentPage=@ViewBag.CurrentPage">Next</a>

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

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

代码语言:javascript
运行
复制
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按顺序包含ActionNames,因此只需增加currentPageEnum值以查找下一页。

代码语言:javascript
运行
复制
enum PageType
{
    Page1,
    Page2
}

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

代码语言:javascript
运行
复制
routes.MapRoute("Page1", "Page1", new { controller="controller1", action="Page1"});
routes.MapRoute("Page2", "Page2", new { controller="controller2", action="Page2"});

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

代码语言:javascript
运行
复制
RedirectToAction(nextPageEnum.ToString()); 

请求终止而不重定向。

  1. 我漏掉了什么信息。
  2. 在ASP.MVC中,是否有更有效的方法在不同视图之间导航?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-11 12:26:35

添加返回语句并使函数返回一些内容。

代码语言:javascript
运行
复制
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,如下代码所示:

代码语言:javascript
运行
复制
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环境中从(剃刀)视图中导航的最佳方法如下:

代码语言:javascript
运行
复制
<div>
    @Html.ActionLink(string linkText, string actionName)
</div>

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

代码语言:javascript
运行
复制
<div>
    @Html.ActionLink(string linkText, string actionName, string controllerName)
</div>
票数 4
EN

Stack Overflow用户

发布于 2012-12-11 12:30:41

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

只管用

代码语言:javascript
运行
复制
   RedirectToAction("ACTION_NAME", "Controller_NAME");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13820399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档