将Odata查询参数添加到@ html.Routelink

时间:2012-06-12 20:22:46

标签: c# asp.net-mvc asp.net-mvc-3 odata

我有 routelink

@Html.RouteLink("Campaigns", "DefaultApi", new { controller = "Campaign", httproute = true })

会产生"http://localhost:54614/api/v0.1/ReportData/Account"

我想要做的是写一个 Routelink - 这将导致

"http://localhost:54614/api/v0.1/ReportData/Account/?$top=20"

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您不能在匿名类型中使用$top作为属性名称,因此您应使用Routelink使用RouteValueDictionary的{​​{1}}重载。

但问题是RouteLink使用Uri.EscapeUriString来转义路由值,因此使用以下代码:

@Html.RouteLink("Campaigns", "DefaultApi", new RouteValueDictionary
                                              {
                                                  { "controller", "Campaign"} ,
                                                  { "httproute", true },
                                                  { "$top", 20 }
                                              })

将生成此网址:/api/Campaign?%24top=20(请参阅$编码为%24

然而,使用非常非常脏的黑客Uri.UnescapeDataString

@Html.Raw(Uri.UnescapeDataString(
    @Html.RouteLink("Campaigns", "DefaultApi", new RouteValueDictionary
                                        {
                                            { "controller", "Campaign"} ,
                                            { "httproute", true },
                                            { "$top", 20 }
                                        }).ToHtmlString()))

您可以获得:/api/Campaign?$top=20