我有一个部分视图,它输出一个编辑器列表。列表中的每个编辑器都有一个删除链接,使用@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的预期输出吗?我对此非常陌生,所以不确定我在实施中是否做错了。
非常感谢。
答案 0 :(得分:0)
是的,这是帮助者Ajax.*
系列产生的标记。我的一般建议,特别是鉴于您不希望添加on*
属性这一事实,就是避免像瘟疫这样的帮助者。您自己有更清晰,可维护(虽然稍微冗长)的代码处理AJAX,即只需添加标准Html.ActionLink
,然后使用jQuery附加调用AJAX的事件处理程序。此外,当出现问题时,几乎不可避免地会出现问题,您对运行的JavaScript有充分的了解和控制权,而不是受某些自以为是的微软开发人员的支配。