[英]Preserve ${name} in Url.Action route values for use with jquery.tmpl?
在這里,我正在冒險嘗試一些人跡罕至的地方,但這似乎並不太合理。
在視圖中,使用以下代碼:
<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}
不是最漂亮的方法,但是您可以將其包裝在Server.UrlDecode
函數中。 所以你的代碼看起來像
<a href="<%: Server.UrlDecode(Url.Action("Profile", new { id= "${Id}" })) %>">${Name}</a>
這將輸出/User/Profile?id=${id}
另一種方法是創建自己的HTML Helper,它將返回RAW輸入而不是對其進行編碼。 我必須對ActionLink
做類似的事情。 看看我有關它的博客文章。 具有HTML內容的MVC ActionLink。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.