从局部视图加载的模态 window 在关闭时保持打开状态
Modal window loaded from partial view keeps opening when closed
编辑决赛:
除了接受的答案,我还必须弄清楚如何关闭模式,这与在这种情况下隐藏对话框不同。
这一点 javascript 帮助我关闭了模式,隐藏了背景,并将其关闭到可以让我在页面上重新打开另一个不同模式的程度。
<script>
$(document).on("click", ".btnCloseDeviceActivityModal", function () {
var deviceActivityModal = $('.deviceActivityModal');
deviceActivityModal.hide();
$('body').removeClass('modal-open');
$('.modal-backdrop').remove();
});
</script>
编辑:想指出的是,当我调试时,它向我显示每次关闭模态时它都会回调到我的部分视图控制器中。所以它正在完全加载它,包括返回控制器和查询数据库。每次我关闭 window.
时,它实际上是在调用 javascript 方法
还想补充一点,我尝试更改为单击按钮的 onclick="doModal()" 方式,并将 javascript 中的方法命名为 doModal()。我在关闭时仍然得到与重新打开相同的行为。
更多的观察是按钮丢失了所有文本,并且在第一次单击后只是一个小方块。我可以在模式的背景中看到这一点。另一个有趣的事情是,每次我单击模态框上的关闭按钮时,模态框的背景(外部)会变得越来越暗。
我有一个显示部分视图的模式 window。每次我单击关闭按钮时,它都会立即重新打开。我试过在 javascript 中用 'hide' 设置它。我尝试了一些完全样板模式,所以我认为问题是我调用模式的方式。
这是通过单击此按钮启动模态的方式:
<button data-url="@Url.Action("DeviceActivity","Devices", new { @id = item.DeviceId })" class="btn btn-primary btnOpenDeviceActivityModal">Activity</button>
这是从控制器中检索到的数据加载模式 window 的 javascript。它在模态中成功显示局部视图:
@* Display the device activity in a modal window. Data is loaded from the partial View *@
<script>
$('.btnOpenDeviceActivityModal').click(function () {
var url = $(this).data("url");
$(this).load(url, function () {
$("#deviceActivityModal").modal("show");
});
})
</script>
虽然看起来无关紧要,但只是为了好玩,这是我的模态局部视图:
<div class="modal fade" id="deviceActivityModal" style="margin-left:100px; margin-top:80px">
<div class="modal-dialog-scrollable" style="top:180px; right:200px">
<div class="modal-content" style="width:1000px; max-height:800px;">
<div class="modal-header">
<button id="closeModal" type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
</div>
<div class="modal-body">
<h2 style="text-align:center">Device Activity Records</h2>
<table class="table table-striped table-bordered">
<thead class="thead-light">
<tr>
<th>
Activity Date
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.DeviceActivityRecords)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ActivityDate)
</td>
</tr>
}
</tbody>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
是什么导致我的模式 window 每次关闭时都重新打开。似乎在我点击模式的任何地方都会关闭(并重新打开)它。我不知道它是否相关,所以这就是我提出它的原因。我怎样才能让它关闭并保持关闭状态? SO 上的其他答案对模态代码有一些明显的问题,但我没有看到我调用模态的方式有什么问题(这似乎是常见问题,因为我完全替换了模态代码进行测试)。
$(this).load
正在按钮内注入模态标记 - 这可能不是您想要的。我假设您打算使用 $.get
,它的工作方式确实有点不同。
$('.btnOpenDeviceActivityModal').on('click', function () {
var url = $(this).data("url");
$.get(url)
.done(function (response) {
$(response).modal("show");
});
});
这将使用从 AJAX 调用返回的标记作为 .modal()
函数的目标 - 可能想要围绕它添加一些健全性检查。
供参考:
$(selector).load()
: https://api.jquery.com/load/
$.get()
: https://api.jquery.com/jQuery.get/
编辑决赛: 除了接受的答案,我还必须弄清楚如何关闭模式,这与在这种情况下隐藏对话框不同。
这一点 javascript 帮助我关闭了模式,隐藏了背景,并将其关闭到可以让我在页面上重新打开另一个不同模式的程度。
<script>
$(document).on("click", ".btnCloseDeviceActivityModal", function () {
var deviceActivityModal = $('.deviceActivityModal');
deviceActivityModal.hide();
$('body').removeClass('modal-open');
$('.modal-backdrop').remove();
});
</script>
编辑:想指出的是,当我调试时,它向我显示每次关闭模态时它都会回调到我的部分视图控制器中。所以它正在完全加载它,包括返回控制器和查询数据库。每次我关闭 window.
时,它实际上是在调用 javascript 方法还想补充一点,我尝试更改为单击按钮的 onclick="doModal()" 方式,并将 javascript 中的方法命名为 doModal()。我在关闭时仍然得到与重新打开相同的行为。
更多的观察是按钮丢失了所有文本,并且在第一次单击后只是一个小方块。我可以在模式的背景中看到这一点。另一个有趣的事情是,每次我单击模态框上的关闭按钮时,模态框的背景(外部)会变得越来越暗。
我有一个显示部分视图的模式 window。每次我单击关闭按钮时,它都会立即重新打开。我试过在 javascript 中用 'hide' 设置它。我尝试了一些完全样板模式,所以我认为问题是我调用模式的方式。
这是通过单击此按钮启动模态的方式:
<button data-url="@Url.Action("DeviceActivity","Devices", new { @id = item.DeviceId })" class="btn btn-primary btnOpenDeviceActivityModal">Activity</button>
这是从控制器中检索到的数据加载模式 window 的 javascript。它在模态中成功显示局部视图:
@* Display the device activity in a modal window. Data is loaded from the partial View *@
<script>
$('.btnOpenDeviceActivityModal').click(function () {
var url = $(this).data("url");
$(this).load(url, function () {
$("#deviceActivityModal").modal("show");
});
})
</script>
虽然看起来无关紧要,但只是为了好玩,这是我的模态局部视图:
<div class="modal fade" id="deviceActivityModal" style="margin-left:100px; margin-top:80px">
<div class="modal-dialog-scrollable" style="top:180px; right:200px">
<div class="modal-content" style="width:1000px; max-height:800px;">
<div class="modal-header">
<button id="closeModal" type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
</div>
<div class="modal-body">
<h2 style="text-align:center">Device Activity Records</h2>
<table class="table table-striped table-bordered">
<thead class="thead-light">
<tr>
<th>
Activity Date
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.DeviceActivityRecords)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ActivityDate)
</td>
</tr>
}
</tbody>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
是什么导致我的模式 window 每次关闭时都重新打开。似乎在我点击模式的任何地方都会关闭(并重新打开)它。我不知道它是否相关,所以这就是我提出它的原因。我怎样才能让它关闭并保持关闭状态? SO 上的其他答案对模态代码有一些明显的问题,但我没有看到我调用模态的方式有什么问题(这似乎是常见问题,因为我完全替换了模态代码进行测试)。
$(this).load
正在按钮内注入模态标记 - 这可能不是您想要的。我假设您打算使用 $.get
,它的工作方式确实有点不同。
$('.btnOpenDeviceActivityModal').on('click', function () {
var url = $(this).data("url");
$.get(url)
.done(function (response) {
$(response).modal("show");
});
});
这将使用从 AJAX 调用返回的标记作为 .modal()
函数的目标 - 可能想要围绕它添加一些健全性检查。
供参考:
$(selector).load()
: https://api.jquery.com/load/
$.get()
: https://api.jquery.com/jQuery.get/