ASP.NET MVC如何调用其他控制器的动作?

时间:2010-12-04 19:28:24

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

(解决了,看看这个解决方案的结尾)

嗨,我想说我有那个网址:

http://mystite.com

然后,我使用HomeControllerIndex操作。

但是,如果网址看起来像

http://mystite.com/itemID

itemID是字符串,可选,然后我使用MyController和操作ViewContent

Global.asax文件:

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

问题是,当我使用第一个URL时,服务器会将其视为第二个URL(显而易见的)。那么,如果itemID参数为NULL,那么如何从HomeController调用Index的{​​{1}}操作?

我试过

MyController

但它总是将我重定向回return RedirectToAction("Index", "Home"); 的{​​{1}}行动

解决

我通过将RedirectToAction方法从MyController的{​​{1}}操作移动到ViewContent的{​​{1}}操作来解决了这个问题。

我尝试从MyController - >重定向ViewContent它没有用。 现在我从HomeController - &gt;撤消了重定向。 <{1}}来自

Index

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

1 个答案:

答案 0 :(得分:0)

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

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

实际上你可以把另一条路线放在最上面:

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

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