如何在MVC3中生成包含多个参数的链接?

时间:2012-05-02 13:44:08

标签: asp.net-mvc-3 razor

我有一个看起来像

的控制器方法
public ViewResult Index(string id, string participant="", string flagged = "")

id是此控制器的global.asax中的路由值。我想将其他值作为常规参数传递,因此链接看起来像

.../controller/Index/id?participant=yes&flagged=no

有没有办法使用MVC 3中的Razor脚本生成这样的链接?

2 个答案:

答案 0 :(得分:7)

您可以传递ActionLink方法的routeValues参数中的所有参数:

@Html.ActionLink(
    "go to index",                  // linkText
    "index",                        // actionName
    new {                           // routeValues
        id = "123", 
        participant = "yes", 
        flagged = "no" 
    }
)

假设默认路由设置,这将生成:

<a href="/Home/index/123?participant=yes&amp;flagged=yes">go to index</a>

更新:

要进一步详细说明您发布的评论,如果ActionLink生成了一个Length=6的网址,例如这意味着您使用了错误的重载。例如,错误

@Html.ActionLink(
    "go to index",             // linkText
    "index",                   // actionName
    "home",                    // routeValues
    new {                      // htmlAttributes
        id = "123", 
        participant = "yes", 
        flagged = "no" 
    }
)

很明显,为什么我在每个参数名称中添加的注释都是错误的。因此,请确保您仔细阅读Intellisense(如果您足够幸运,可以在Razor中使用Intellisense :-))来选择正确的辅助方法重载。

在您要指定控制器名称的情况下,正确的重载如下:

@Html.ActionLink(
    "go to index",             // linkText
    "index",                   // actionName
    "home",                    // controllerName
    new {                      // routeValues
        id = "123", 
        participant = "yes", 
        flagged = "no" 
    },
    null                       // htmlAttributes
)

注意作为最后一个参数传递的null。这与htmlAttributes参数对应。

答案 1 :(得分:3)

您可以使用ActionLink:

@Html.ActionLink("Title",
                 "ActionName", 
                  new {id = 1, participant = "yes", flagged = "no"})