我在这里冒险走了一段路,但这似乎并不太合理。
在视图中,使用以下代码:
<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>
我理解为什么会发生这种情况,但我正在努力解决的是阻止路由值编码的方法。经过一段时间在解编译代码中挖掘后,我失去了踪迹,编码的实际机制使我望而却步。如果是我,我会将路线值转换为HttpNameCollection
和ToString
,例如使用HttpUtility.Parse()
。
对于这样的事情,MVC非常灵活,因此我发现很难相信我无法使用MvcHtmlString
或其他内容更改编码器或包裹路由值。
如何从UrlHelper扩展或替换和扩展编码器获取Url.Action,使用jquery.tmpl格式保留路由值:${value}
答案 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.