我有一个看起来像
的控制器方法public ViewResult Index(string id, string participant="", string flagged = "")
id
是此控制器的global.asax中的路由值。我想将其他值作为常规参数传递,因此链接看起来像
.../controller/Index/id?participant=yes&flagged=no
有没有办法使用MVC 3中的Razor脚本生成这样的链接?
答案 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&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"})