ASP.NET MVC AJAX actionlink注入onclick属性

时间:2014-09-23 19:17:36

标签: asp.net-mvc asp.net-ajax actionlink

我有一个部分视图,它输出一个编辑器列表。列表中的每个编辑器都有一个删除链接,使用@Ajax.actionlink调用,如下所示:

if(Model.Any()){
    <ul>
        @foreach (var editor in Model)
        {
            <li>@editor.firstName @editor.lastName, @editor.emailAddress (@Ajax.ActionLink("Delete", "DeleteEditor", "EditorSurface", new { editorId = editor.id }, new AjaxOptions()))</li>
        }
    </ul>
}

我在我的视图中包含了@using System.Web.Optimization;,并且从我的视角中调用了jquery不显眼的ajax脚本:

@Scripts.Render("~/scripts/jquery.unobtrusive-ajax.min.js")

问题在于,当我查看源代码时,我的编辑器列表项的呈现标记是这样的:

<li>John Smith, johnsmith@example.com (<a href="/umbraco/Surface/EditorSurface/DeleteEditor?editorId=32" onclick="Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace });">Delete</a>)</li>

我对删除链接中的内联JavaScript感到有些失望,并希望能有一些更清洁的东西。 (可能是数据属性还是什么?)。令我感到震惊的是,这很难被勾解(提供确认信息等)。

问题是,这是ASP.NET MVC中AJAX的预期输出吗?我对此非常陌生,所以不确定我在实施中是否做错了。

非常感谢。

1 个答案:

答案 0 :(得分:0)

是的,这是帮助者Ajax.*系列产生的标记。我的一般建议,特别是鉴于您不希望添加on*属性这一事实,就是避免像瘟疫这样的帮助者。您自己有更清晰,可维护(虽然稍微冗长)的代码处理AJAX,即只需添加标准Html.ActionLink,然后使用jQuery附加调用AJAX的事件处理程序。此外,当出现问题时,几乎不可避免地会出现问题,您对运行的JavaScript有充分的了解和控制权,而不是受某些自以为是的微软开发人员的支配。