Bootstrap模态框在Razor Pages中无法弹出的问题排查
问题:Razor Page中Bootstrap模态框点击按钮无反应
我将以下代码复制粘贴到Razor Page视图中,点击触发按钮后无任何反应:
<!-- Button trigger modal --> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalCenter"> Launch demo modal </button> <!-- Modal --> <div class="modal fade" id="exampleModalCenter" 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"> ... </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> <button type="button" class="btn btn-primary">Save changes</button> </div> </div> </div> </div>
我已将以下两个Bootstrap资源链接添加到_Layout文件中,但模态框仍无法弹出:
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script>
解决方案
问题出在Bootstrap版本的属性兼容性上:你引入的是Bootstrap 5.2.2,但模态框相关的触发和关闭按钮用的是Bootstrap 4及更早版本的旧属性,Bootstrap 5已经废弃了这些不带bs前缀的data属性,所以无法触发模态框。
需要修改的属性如下:
- 触发按钮的
data-toggle="modal"→data-bs-toggle="modal" - 触发按钮的
data-target="#exampleModalCenter"→data-bs-target="#exampleModalCenter" - 关闭按钮的
data-dismiss="modal"→data-bs-dismiss="modal"
修改后的完整代码:
<!-- Button trigger modal --> <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalCenter"> Launch demo modal </button> <!-- Modal --> <div class="modal fade" id="exampleModalCenter" 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="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> ... </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> <button type="button" class="btn btn-primary">Save changes</button> </div> </div> </div> </div>
另外补充:Bootstrap 5中推荐使用btn-close类替换旧的close类,这样样式会更贴合Bootstrap 5的设计,不过即使不改这个类,只要修正了data属性,模态框也能正常工作。
内容的提问来源于stack exchange,提问作者lbs91
相关产品推荐
相关产品推荐

