【问题标题】:ASP.NET MVC AJAX actionlink injects onclick attributeASP.NET MVC AJAX actionlink 注入 onclick 属性
【发布时间】:2014-09-23 19:17:35
【问题描述】:

我有一个输出编辑器列表的部分视图。列表中的每个编辑器都有一个删除链接,使用@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 unobtrusive 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 的预期输出吗?我对此很陌生,所以不确定我在实施中是否做错了什么。

非常感谢。

【问题讨论】:

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


    【解决方案1】:

    是的,这是Ajax.* 助手家族产生的标记。我的一般建议,特别是考虑到您不希望添加 on* 属性这一事实,是避免像瘟疫一样使用这些助手。您将拥有更清晰和可维护(虽然稍微冗长)的代码自己处理 AJAX,即只需添加一个标准 Html.ActionLink,然后使用 jQuery 附加一个调用 AJAX 的事件处理程序。此外,当出现问题时,几乎不可避免地会出现问题,您对正在运行的 JavaScript 拥有完全的知识和控制权,而不是受某些固执己见的 Microsoft 开发人员的摆布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      相关资源
      最近更新 更多