你不能使用data-url='@Html.Action("Detail", "Users", new { id = item.user_id_IN })'
在你的按钮中生成一个网址。@Html.Action()
是一个调用您控制器的方法。将会发生的情况是,对于模型中的每个项目,您都会点击Detail
的方法UsersController
(如果你有很多物品,性能一定很糟糕:))。
由于您似乎只需要一个网址(/Users/Detail
)我建议你只将ID存储在data中以最小化生成的html。正如其他答案中所述,您还需要为按钮使用类名以防止无效的 html,我还建议使用type="button"
因为默认值(取决于浏览器)可能是“提交”(您没有表单,所以在这种情况下并不重要,但这是一个很好的做法)。也没有真正需要使用@Html.DisplayFor()
除非你使用自定义DisplayTemplate
或有一个[DisplayFormat]
属性上的属性。
将 html 更改为
<button type="button" data-id="@item.user_id_IN" class="js-reload-details">@item.DisplayName</button>
和脚本
var url = '@Url.Action("Detail", "Users");
$('.js-reload-details').click(function() {
$.get(url, { id: $(this).data('id') }, function (data) {
$('#detailsDiv').html(data);
});
});
请注意您不想使用replaceWith()
在你的情况下。.replaceWith()
将替换实际的 div<div id="detailsDiv"></div>
使用您的方法返回的 html,因此下次用户单击此按钮或任何其他按钮时,将调用该方法,但是<div id="detailsDiv"></div>
不再存在,什么也不会发生。
$('#detailsDiv').html('Hello world');
renders
<div id="detailsDiv">Hello world</div>
but
$('#detailsDiv').replaceWith('Hello world');
renders
Hello world