MVC路由没有在URL中显示1个操作的操作,但ID只显示在同一控制器上的另一个操作的URL中?

时间:2017-04-24 11:01:06

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

在我的家庭控制器上,除了一个动作之外的所有操作都没有ID参数,对于没有ID参数的所有操作,我希望操作但不是控制器显示在URL中。对于一个动作,我不希望控制器或动作在URL中显示,只有该动作的ID参数,例如:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div><input id="someInput" type="text" /></div>
<div id="someDiv">this should change color when input is focused</div>

但是,如果我首先放置OnlyCourse路线,则索引操作会通过它,如果我首先放置OnlyAction路线,则找不到OnlyCourse路线。如何让这些路线独立响应特定的行动?

编辑 -

因此,例如,仅课程(课程操作)的URL将是:

http://www.sitename.come/courseabbrev

,其他操作的URL将是

http://www.sitename.com/action

我现在尝试了以下内容:

routes.MapRoute(
            "OnlyCourse",
            "{courseabbrev}",
            defaults: new { controller = "Home", action = "course", courseabbrev = UrlParameter.Optional }
        );

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

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{courseabbrev}",
                defaults: new { controller = "Home", action = "Index", courseabbrev = UrlParameter.Optional }
            );

这就是索引操作的诀窍,但是任何其他操作仍然使用OnlyCourse路径。我尝试添加一个约束,但它似乎没有做太多,因为该路线会考虑除了索引之外的所有操作。

1 个答案:

答案 0 :(得分:0)

它不会起作用,因为两个路线"{courseabbrev}""{action}"的模板都相似意味着如果您使用"{courseabbrev}"它将忽略"{action}",因此您必须将其中一个路由到routes.MapRoute( "OnlyCourse", "courseabbrev/{courseabbrev}", defaults: new { controller = "Home", action = "course"} ); routes.MapRoute( "OnlyAction", "{action}", defaults: new { controller = "Home", action = "Index" } ); 更具体这样

/courseabbrev

所以您的网址将是

http://www.sitename.come/courseabbrev/yourcourseabbrev

http://www.sitename.com/action

如果您希望路线为 routes.MapRoute( "OnlyCourse", "{courseabbrev}", defaults: new { controller = "Home", action = "course" } ); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional} ); ,那么

li

现在您的网址将是

http://www.sitename.come/courseabbrev

http://www.sitename.com/controller/action