razor - 如何在 Blazor 客户端应用程序中使用 Bootstrap 模式?
问题描述
我试图显示引导模式然后绑定它的按钮。但我无法通过显示模态的第一步。我正在使用 .net core 3.1 的 Blazor 客户端模板。我有一个名为 Modal.razor 的页面,其中包含我从 getbootstrap.com 找到的引导模式。
@if (Show)
{
<div class="modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">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">
<p>Modal body text goes here.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary">Save changes</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
}
@code {
[Parameter]
public bool Show { get; set; } = false;
}
我在 index.razor 文件中调用了模态
@page "/"
<button @onclick="(()=>switchModal=!switchModal)">Switch Modal</button>
<Modal Show="switchModal"/>
@code{
bool switchModal = false;
}
你可能会说 StateHasChanged 应该在这里被调用。但即使我将模态代码复制并粘贴到 index.razor 中,我也什么也看不到。
解决方案
可能有更好的方法来做到这一点,但这里有一个工作示例可以帮助您入门:
页:
@page "/modal-test"
<BlazorApp1.Components.Modal @ref="Modal"></BlazorApp1.Components.Modal>
<button @onclick="() => Modal.Open()">Open Modal</button>
@code {
private BlazorApp1.Components.Modal Modal { get; set; }
}
零件:
<div class="modal @ModalClass" tabindex="-1" role="dialog" style="display:@ModalDisplay">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">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">
<p>Modal body text goes here.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary">Save changes</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal" @onclick="() => Close()">Close</button>
</div>
</div>
</div>
</div>
@if (ShowBackdrop)
{
<div class="modal-backdrop fade show"></div>
}
@code {
public Guid Guid = Guid.NewGuid();
public string ModalDisplay = "none;";
public string ModalClass = "";
public bool ShowBackdrop = false;
public void Open()
{
ModalDisplay = "block;";
ModalClass = "Show";
ShowBackdrop = true;
StateHasChanged();
}
public void Close()
{
ModalDisplay = "none";
ModalClass = "";
ShowBackdrop = false;
StateHasChanged();
}
}
解决此问题的另一种选择是使用 JSInterop 调用$('#modalId').modal()
通过执行以下操作,您可以让组件的每个版本都有一个唯一的 ID:
<div id="bootstrap-modal-@Guid"
然后使用保存的 ID 通过 jQuery 调用 .modal()。
推荐阅读
- java - 如何使用 DevKit 在 Intellij 中添加选择框以运行工具栏
- php - 如何添加多个订单项
使用 qbxml 和 php 动态添加销售收据? - javascript - NodeJS Rest API 发送一个空数组
- ember.js - 在 ember 中为现有路由添加父路由
- java - A warning is shown when Optional.isPresent and Optional.get are called "on different" levels?
- angular - 组件不是已知元素 [Angular]
- java - OpenJDK开发中如何使用STL函数?
- django - django 验证用户并生成 JWT 令牌
- python - 在变量中获取 stderr 并使用可能需要从 stdin 读取的子进程实时打印它
- segmentation-fault - QLabel.setPixmap 与 PyQt5 后的分段错误