我在这里冒险有点不走寻常路,但这似乎并不太不合理。
在一个视图中,使用此代码:
<div>Hello ${Name}</div>
浏览 jquery.tmpl 提供的 { Id: 1 , Name = " Bob " },将在客户端呈现以下内容:
<div>Hello Bob</div>
这很好,但让我们介绍一个 Url:
在一个视图中,使用此代码:
<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>
我理解为什么会发生这种情况,但我正在努力解决的是一种防止路由值被编码的方法。在反编译代码中挖掘了一段时间后,我失去了踪迹,编码的实际机制使我无法理解。如果是我,我会将 Route Values 转换为 an HttpNameCollection
and ToString
it,例如使用HttpUtility.Parse()
.
MVC 在这样的事情上非常灵活,所以我很难相信我不能改变编码器或用 anMvcHtmlString
或其他东西包装路由值。
如何获取 Url.Action,无论是来自 UrlHelper 扩展还是替换和扩展编码器,使用 jquery.tmpl 格式保存路由值:${value}