asp.net-core - 在列表上下文中重用 Razor 视图组件
问题描述
比如说,在一个页面上,我有一个项目列表和每个项目旁边的删除按钮。单击后,我想显示一个带有确认消息的弹出窗口。
确认对话框和删除功能被放入视图组件中。
我知道我可以这样做:
foreach (var item in Model.List)
{
<tr class="row">
<td class="col-12">
@item.Name
<button class="btn btn-danger ml-auto" data-toggle="modal"
data-target="#delete-item-@item.Id">×</button>
<vc:delete-item-dialog id="delete-item-@item.Id" item-id="@item.Id"></vc:delete-item-dialog>
</td>
</tr>
}
但是随后每个delete-item-dialog
视图组件都是单独呈现的,从而使生成的 HTML 变得臃肿。
是否可以将该视图组件仅放置在列表末尾之后的一个位置,并item-id
更动态地提供参数?
解决方案
是否可以将该视图组件仅放置在列表末尾之后的一个位置,并更动态地提供 item-id 参数?
是的,您可以使用 ajax 动态加载视图组件。下面是一个工作演示。
看法:
@model List<User>
<table>
@foreach (var item in Model)
{
<tr class="row">
<td class="col-12">
@item.Name
<button class="btn btn-danger ml-auto" onclick="deleteuser(@item.Id)">
×
</button>
</td>
</tr>
}
</table>
<div id="container">
</div>
@section scripts{
<script>
function deleteuser(id){
$.ajax({
type: 'get',
url: 'GetMyViewComponent?id=' + id,
success: function (result) {
$("#container").html(result);
$('.modal').modal('show');
}
})
}
</script>
}
控制器:
public IActionResult UserList()
{
var users = new List<User>
{
new User{ Id = 1, Name = "Mike"},
new User{ Id = 2, Name = "John"},
new User{ Id = 3, Name = "David"},
};
return View(users);
}
public IActionResult GetMyViewComponent(int id)
{
return ViewComponent("PopUp", id);
}
PopUpViewComponent 类:
public class PopUpViewComponent : ViewComponent
{
public IViewComponentResult Invoke(int id)
{
return View(id);
}
}
PopUpViewComponent 剃刀视图:
@model int
<div class="modal fade" id="delete-@Model" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLongTitle">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
Are you sure to delete @Model?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary">Ok</button>
</div>
</div>
</div>
</div>
结果:
推荐阅读
- javascript - philps hue 可达属性,我该如何解决
- java - RESTFUL Web 服务 - 媒体类型=应用程序/xml
- javascript - 插入新网格项后砌体网格变高
- java - 使用 Gradle 进行 Java 标记化
- java - Eclipse 导出 .jar 文件不会运行
- javascript - 确定考试题目数量的方法
- javascript - Discord.js 在频道中发送过消息的唯一用户列表
- php - Symfony 3 / sonata_type_collection 更改查询每个添加行
- c++ - 多重集:多重集添加多个单词的版本并且无法处理大量文本的问题
- python - 如何遍历 json 值并比较所有 json 值,如果为真则返回?