如何将内容插入Ajax.ActionLink

时间:2012-05-18 10:03:19

标签: asp.net ajax asp.net-mvc-3 razor

在Asp.net mvc3 razor中我有:

Ajax.ActionLink("Hello world", "Hello", "Say", new RouteValueDictionary(new { word = "Hello" }),new AjaxOptions { HttpMethod = "GET", InsertionMode = InsertionMode.Replace, UpdateTargetId = "dynamic-container" })

它产生

<a href="...." ...>Hello world</a>

我想得到的是

<a href="..." ...><my><html><content/></html></my></a>

如何传递“”以便插入而不是标准文本?

4 个答案:

答案 0 :(得分:7)

我刚刚找到了解决方案

http://forums.asp.net/post/4517653.aspx

它并不像我预期的那样优雅,但应该这样做。

任何人都有更好的主意吗?

答案 1 :(得分:0)

代码:

Ajax.ActionLink("Hello world", "Hello", "Say", new RouteValueDictionary(new { word = "Hello" }),new AjaxOptions { HttpMethod = "GET", InsertionMode = InsertionMode.Replace, UpdateTargetId = "dynamic-container" })

提供的链接导致错误。链接如下所示:

.../Say/Hello?Count=1&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D

这是BAAADDDDD ....问题是这使用了错误的重载。而不是:

new RouteValueDictionary(new { word = "Hello" })

应该在哪里:

 new { word = "Hello" }

当代码形成前一个答案中的链接时,就像一个魅力 - 希望它对某人,任何人都有帮助

答案 2 :(得分:0)

您可以使用javascript / jQuery在渲染后强制插入项目。这可能有点“快速而肮脏”。但它确实可以毫不费力地完成工作。

使用HtmlAttributes对象为每个@Ajax.Action附加一个类,以便稍后使用JS选择它们:

@Ajax.ActionLink(.....  new { @class = "AjaxLink btn btn-primary" })

然后使用javascript / jQuery按类查找链接,并替换每个链接的innerHTML。以下是一个jQuery示例,它也可以用普通的javascript编写。我个人喜欢jQuery,因为它更简洁:

<script type="text/javascript">
//hack to insert a <span> inside the remove links so that the text can be styled                
$('.AjaxLink ).html('<i class="fa fa-minus-circle"></i><span class="ActionLinkText">Your Text here</span>');

</script>

希望这有帮助

答案 3 :(得分:0)

解决方案@ 4rchie指向使用辅助方法是最好的解决方案。但是还有另一种方法可以使用data- *属性使用链接插入数据,并使用jquery完成其余工作。

例如:

<div class="list-group">
@foreach (var item in Model.Things)
{
   @Ajax.ActionLink(item.Name, "actionName", "controllerName", new { Id = item.Id }, new AjaxOptions { HttpMethod = "GET", InsertionMode = InsertionMode.Replace, UpdateTargetId = "areaPanel", OnComplete = "" }, new { @class = "list-group-item", data_frequency = item.frequency})

}
</div>

Jquery代码:

jQuery(document).ready(function () {
$("[data-frequency]").each(function () {
        var linkText = $(this).html();
        var attr = $(this).attr("data-frequency");
        $(this).html("<span class ='badge'>" + attr + "</span>" + linkText);
})
}

结果类似于http://getbootstrap.com/components/#list-group-badges