jquery-tmpl模板中的ASP.NET MVC ActionLink

时间:2011-05-04 20:29:27

标签: jquery asp.net-mvc asp.net-mvc-3 jquery-templates

我定义了一个jquery-tmpl:

<script id="postTemplate" type="text/x-jquery-tmpl">
     <div class="div-msg-actions-inner">
          @Html.ActionLink("Edit", "Edit", "Post", new { postId = "${PostId}" }, new { @class = "button" })
          @Html.ActionLink("Reply", "Reply", "Post", new { topicId = "${TopicId}" }, new { @class = "button" })
     </div>
 </script>

操作链接导致“$”被编码为“%24”。有没有解决方法,以便我的操作链接中的ID将被正确替换?

4 个答案:

答案 0 :(得分:4)

继续发送相同的路由值参数,但将此脚本放在布局的末尾。它将在每个页面的所有模板中替换所有$ {propName}字符串。

 $("script[type='text/x-jQuery-tmpl']").text(function (i, oldText) {
               return oldText.replace(/(%24%7B.+?%7D)&amp;/gi, "{$1}&")
                             .replace(/%24%7B(.+?)%7D/gi, "$${$1}");
});  

答案 1 :(得分:2)

@Html.ActionLink("Edit", "Edit", "Post", new { postId = "999" }, new { @class = "post-button", })
@Html.ActionLink("Reply", "Reply", "Post", new { topicId = "888" }, new { @class = "reply-button" })

...

$("#postTemplate").text($("#postTemplate").text().replace("999", "${PostId}"));
$("#postTemplate").text($("#postTemplate").text().replace("888", "${TopicId}"));

这是我最终使用的解决方案。

答案 2 :(得分:1)

您可以实现此目的的一种方法是跳过ActionLink Helper并使用简单的HTML锚标记,例如。

<a href='@Url.Content("~/Post/Edit/${PostId}")'>Post</a>
<a href='@Url.Content("~/Post/Reply/${TopicId}")'>Reply</a>

我不知道,但这对我有用。

答案 3 :(得分:0)

Html.RawUrl.Action

一起使用

您是否尝试将Html.RawUrl.Action结合使用?因此,不是使用Html.ActionLink创建链接,而是生成常规HTML,而不对该特定链接/锚点的URL进行编码。

<a href="@Html.Raw(Url.Action("Edit", "Post", new { postId = "${PostId}"}, new { @class = "button" }))">Edit</a>

这应该将模板变量保留在模板中。

Html.RawHtml.ActionLink

一起使用

我想你已经尝试过了:

@Html.Raw(Html.ActionLink("Edit", "Edit", "Post", new { postId = "${PostId}" }, new { @class = "button" }))