【问题标题】:ASP.NET MVC4 ActionLink displays "Index" in linksASP.NET MVC4 ActionLink 在链接中显示“索引”
【发布时间】:2013-03-25 08:10:51
【问题描述】:

通常,路由到任何控制器的 Index 操作的 ActionLink 将省略链接中的“Index”,即http://localhost:8080/Controller/id。就我而言,我试图将字符串作为 ID 传递给 Eta 控制器的 Index 操作。代码如下:

@Html.ActionLink(item.Name, "Index", "Eta", new { id = item.Name }, null)

生成的链接显示为:http://localhost:8080/Eta/Index/some-input-string 而不是 http://localhost:8080/Eta/some-input-string

此 RouteConfig 与 File>New Project>MVC4 Application 完全相同。

【问题讨论】:

    标签: asp.net-mvc-4


    【解决方案1】:

    在 URI 中包含“索引”作为操作是必要的,因为您在字符串中包含路由值。

    如果不指定动作,路由值将被解释为动作。

    例如:

    http://localhost:8080/Etc/abc123
                           ^    ^
                    Controller  |
                                |
                            Action (oops)
    

    对您来说,abc123 是一个有意义的参数。对于路由引擎来说,这是一个动作。

    【讨论】:

    • 谢谢!想想看,这很明显。
    【解决方案2】:

    MVC4模板中的标准路由是{Controller}/{Action}/{id},所以你需要把它改成{Controller}/{id},默认Action = "Index"

    【讨论】:

    • 这是不可能的。路由引擎如何知道名为 1 的操作和 id 之间的区别?你瞎猜猜错了。
    • 如果路由配置为 {controller}/{id} 而第二个参数将始终被解释为 {id}
    • 那么你将永远不会点击 /controller/action 第二个参数将永远是 id
    • 在问题中,作者试图使用默认的“索引”从链接中删除操作。我向他展示了这样做的方法。这可能是错误的方式,但我对他的应用程序一无所知,我只是回答了这个问题
    • 啊。我想你误会了。 OP 希望仅在默认情况下省略操作(通常在默认情况下发生),但要让操作包括所有控制器的所有其他情况。但是,根据您的理解,这将是正确的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2014-05-05
    相关资源
    最近更新 更多