【问题标题】:Preserve ${name} in Url.Action route values for use with jquery.tmpl?在 Url.Action 路由值中保留 ${name} 以与 jquery.tmpl 一起使用?
【发布时间】:2013-08-13 16:09:37
【问题描述】:

我在这里冒险有点偏僻,但这似乎并不太不合理。

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

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

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

<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 转换为 HttpNameCollectionToString 它,例如使用 HttpUtility.Parse()

MVC 在处理此类事情时非常灵活,所以我很难相信我无法更改编码器或使用 MvcHtmlString 或其他东西包装路由值。

如何获取 Url.Action,无论是来自 UrlHelper 扩展还是替换和扩展编码器,使用 jquery.tmpl 格式保存路由值:${value}

【问题讨论】:

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


    【解决方案1】:

    不是最漂亮的方式,但您可以将其包装在 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.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 2011-08-01
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多