簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM