You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于TempData值自动打开Modal弹窗?

问题修复方案

你的弹窗无法正常显示主要源于语法错误、逻辑问题以及框架版本适配问题,以下是具体修复步骤:

1. 修正JavaScript判断逻辑的语法与格式错误

原JS代码存在引号拼接错误、逻辑顺序颠倒,且未正确处理Razor变量转JS的格式问题,修改后:

$(document).ready(function () {
    // 安全转换Razor变量到JS,避免引号冲突
    var warningText = @Html.Raw(Json.Encode(TempData["WarningText"]));
    // 先判断值存在,再判断非空
    if (warningText && warningText.trim() !== "") {
        // Bootstrap 5需用原生JS调用Modal(你的代码用了data-bs-*属性,对应Bootstrap 5)
        new bootstrap.Modal(document.getElementById('GenericWarningModal')).show();
        // 若用Bootstrap 4及以下,可保留jQuery写法:$("#GenericWarningModal").modal('show');
    }
});

错误点说明:

  • 原代码|| @TempData["WarningText"]" != null多了一个闭合引号,直接导致语法报错
  • 直接拼接Razor变量到JS字符串会引发引号冲突,Json.Encode可安全完成格式转换
  • 逻辑顺序应先判断null,再判断空字符串,避免空值调用trim()时出错

2. 统一警告文本的数据源

你控制器将警告内容存入TempData["WarningText"],但Modal内容用的是@ViewBag.WarningText,容易导致内容不一致,改成:

<div class="modal-body">
    @TempData["WarningText"]
</div>

若需保留ViewBag,可在控制器中添加代码:ViewBag.WarningText = TempData["WarningText"];

3. 匹配Bootstrap版本的调用方式

你的Modal使用了data-bs-*属性,说明是Bootstrap 5版本,此时jQuery的.modal('show')方法已被移除,必须使用Bootstrap原生JS API调用。如果是Bootstrap 4及更低版本,可继续使用jQuery写法,但要确保jQuery在Bootstrap之前加载。

完整修复后的代码示例

<script type="text/javascript">
    $(document).ready(function () {
        var warningText = @Html.Raw(Json.Encode(TempData["WarningText"]));
        if (warningText && warningText.trim() !== "") {
            new bootstrap.Modal(document.getElementById('GenericWarningModal')).show();
        }
    });
</script>

<!-- Modal -->
@using (Html.BeginForm("Warning", "Generic", FormMethod.Post))
{
    <div class="modal fade" id="GenericWarningModal" tabindex="-1" role="dialog" aria-labelledby="warningModalTitle" data-bs-backdrop="static" aria-hidden="true">
        <div class="modal-dialog modal-dialog-scrollable">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="warningModalLongTitle">确认取消开球时间</h5>
                    <button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>
                <div class="modal-body">
                    @TempData["WarningText"]
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button>
                    <button type="button" id="modalProceed" class="btn btn-primary">继续</button>
                </div>
            </div>
        </div>
    </div>
}

内容的提问来源于stack exchange,提问作者GroupPlay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:05:04