Если бы вы реализовали свое собственное расширение ActionLink в соответствии с:
public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText,
string actionName, string controllerName,
object routeValues, bool noEncode)
{
var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
var url = urlHelper.Action(actionName, controllerName, routeValues);
if (noEncode) url = Uri.UnescapeDataString(url);
var tagBuilder = new TagBuilder("a");
tagBuilder.MergeAttribute("href", url);
tagBuilder.InnerHtml = linkText;
return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal));
}
Тогда вы могли бы сделать свой шаблон следующим образом:
<p class="post-info">
<p class="post-info" data-bind="text UserName"></p>
<span data-bind="Body"></span>
<p class="post-footer">
@Html.ActionLink("Comments (${CommentCount})", "IndividualPost", "Post",
new {id = "${id}"}, true)
</p>
</p>
сгенерированный HTML-сервер на сервере будет выглядеть так::
<p class="post-info">
<p class="post-info" data-bind="text UserName"></p>
<span data-bind="Body"></span>
<p class="post-footer">
<a href="/Post/IndividualPost/${id}">Comments (${CommentCount})</a>
</p>
</p>
, что, на мой взгляд, является идеальным шаблоном.
Причиной расширения ActionLink является тот факт, что обычный Html.ActionLink кодирует ваш URL-адрес в /Post/IndividualPost/%24%7Bid%7D
, чтоне работает для шаблона