在Url.Action路由值中保留$ {name}以与jquery.tmpl一起使用?

时间:2013-08-12 11:08:08

标签: c# asp.net-mvc urlencode jquery-templates

我在这里冒险走了一段路,但这似乎并不太合理。

在视图中,使用以下代码:

<div>Hello ${Name}</div>

通过{Id: 1 ,Name =“ Bob ”}提供的jquery.tmpl,将在客户端上呈现以下内容:

<div>Hello Bob</div>

这很好,但我们要介绍一个网址:

在视图中,使用以下代码:

<div>Hello <a href="<%: Url.Action("Profile", new { id= "${Id}" }) %>">${Name}</a></div>

呈现给:

<div>Hello <a href="/User/Profile?id=%24%7BId%7D">${Name}</a></div>

在浏览jquery.tmpl之后,编码的Id标记没有被选中:

 <div>Hello <a href="/User/Profile?id=%24%7BId%7D">Bob</a></div>

我理解为什么会发生这种情况,但我正在努力解决的是阻止路由值编码的方法。经过一段时间在解编译代码中挖掘后,我失去了踪迹,编码的实际机制使我望而却步。如果是我,我会将路线值转换为HttpNameCollectionToString,例如使用HttpUtility.Parse()

对于这样的事情,MVC非常灵活,因此我发现很难相信我无法使用MvcHtmlString或其他内容更改编码器或包裹路由值。

如何从UrlHelper扩展或替换和扩展编码器获取Url.Action,使用jquery.tmpl格式保留路由值:${value}

1 个答案:

答案 0 :(得分:0)

不是最漂亮的方式,但你可以将它包装在Server.UrlDecode函数中。所以你的代码看起来像

<a href="<%: Server.UrlDecode(Url.Action("Profile", new { id= "${Id}" })) %>">${Name}</a>

这会输出/User/Profile?id=${id}

另一种方法是创建自己的Html Helper,它将返回RAW输入而不是编码。我必须做与ActionLink类似的事情。看看我关于它的博客文章。 MVC ActionLink with HTML Content.