【问题标题】:ASP.NET MVC How to invoke the other controller's action?ASP.NET MVC 如何调用其他控制器的动作?
【发布时间】:2010-12-04 19:28:23
【问题描述】:

(已解决,看@本说明的结尾)

嗨,假设我有那个 URL:

http://mystite.com

然后,我使用HomeControllerIndex 操作。

但是,如果 URL 看起来像

http://mystite.com/itemID

itemID是一个字符串,是可选的,那我用MyController和actionViewContent

Global.asax 文件:

    routes.MapRoute(
        "ViewItemContent",
        "{itemID}",
        new { controller = "My", 
              action = "ViewContent", 
              itemID = UrlParameter.Optional 
            }
    );

问题是,当我使用第一个 URL 时,服务器将其视为第二个 URL(很明显)。那么,如果itemID 参数是NULL,那么如何从MyController 调用HomeControllerIndex 操作?

我试过了

return RedirectToAction("Index", "Home");

但它总是将我重定向回 MyControllerViewContent 操作

已解决

我通过将 RedirectToAction 方法从MyControllerViewContent 操作移动到HomeControllerIndex 操作解决了这个问题。

我尝试从 MyController 重定向 -> Home 但没有成功。 现在我反转了重定向,从Home -> MyController by

return RedirectToAction("ViewCategory", "Category", new { itemID = itemID });

在这种情况下一切正常:)

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-routing


    【解决方案1】:

    那是因为你没有正确配置路由。思考并了解路线的运作方式。如果您到另一条路线的路线非常相似以及如何退回到另一条路线,这可能会很棘手。顺序很重要。

    也许您只是将"ViewItemContent" 路由放在另一条路由之上。由于RedirectToAction,您的解决方案再次不必要地往返于服务器。

    其实你可以在顶部放另一条路线:

    routes.MapRoute(
        "Home",
        "",
        new { controller = "Home", 
              action = "Index"
            }
    );
    

    因此 MVC 将首先查找此内容,并且由于 http://mystite.com 后面没有任何内容,因此“Home”路由将优先,它将直接使用 Home 控制器和 Index 操作。

    【讨论】:

      猜你喜欢
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 2016-01-31
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多