ASP.NET MVC ActionLink в шаблоне jquery-tmpl - PullRequest
2 голосов
/ 05 мая 2011

У меня определен 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". Есть ли способ обойти это, чтобы идентификатор в моей ссылке действия был заменен правильно?

Ответы [ 4 ]

4 голосов
/ 08 декабря 2012

Продолжайте посылать параметр значения маршрута тем же, но поместите этот скрипт в конец вашего макета.он заменит все строки $ {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}");
});  
2 голосов
/ 05 мая 2011
@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}"));

Это решение, которое я использовал в итоге.

1 голос
/ 23 мая 2011

Один из способов добиться этого - пропустить помощник ActionLink и использовать простой HTML-тег привязки, например,

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

Не идеально, я знаю, но это сработало для меня.

0 голосов
/ 05 мая 2011

Использование Html.Raw с Url.Action

Вы пробовали использовать Html.Raw в сочетании с Url.Action?Поэтому вместо создания ссылок с помощью Html.ActionLink вы скорее генерируете обычный HTML-код и не кодируете URL-адрес этой конкретной ссылки / якоря.

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

Это должно держать переменную шаблона внутри вашего шаблона.

Использование Html.Raw с Html.ActionLink

Полагаю, вы пробовали это:

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