点击服务器端按钮弹出Bootstrap模态框报错“Model is not a function”求助
这个报错本质是Bootstrap的modal方法没有正确绑定到jQuery对象上,我帮你梳理几个最可能的原因和对应的修复方案:
1. 重复定义了OpenPopUp函数
看你的代码里,前后出现了两份完全一样的OpenPopUp函数定义:
<script> function OpenPopUp() { debugger; $('#myModal').modal('show'); } </script>
虽然重复定义不会直接触发modal报错,但可能引发JS上下文的隐性问题,建议删掉其中一份,只保留一个函数定义即可。
2. ScriptManager.RegisterStartupScript的使用有误
你当前的服务器端代码写法存在参数搭配错误:
ScriptManager.RegisterStartupScript(this, Page.GetType(), "success", "<script> OpenPopUp(); </script>", false);
第四个参数addScriptTags设为false时,意味着你传入的脚本内容不需要系统自动包裹<script>标签,但你手动加了,这会导致最终输出的HTML里出现嵌套的<script>标签,引发语法错误,进而导致函数无法正常执行。
正确写法二选一即可:
- 去掉手动的
<script>标签,将第四个参数设为true(推荐,更规范):ScriptManager.RegisterStartupScript(this, Page.GetType(), "success", "OpenPopUp();", true); - 或者保留纯脚本内容,第四个参数设为
false:ScriptManager.RegisterStartupScript(this, Page.GetType(), "success", "OpenPopUp();", false);
3. 页面重复加载了jQuery
这是这类报错最常见的根源:如果你的页面其他地方(比如母版页、嵌套的用户控件)又加载了一次jQuery,会覆盖之前绑定了Bootstrap方法的jQuery对象,导致$('#myModal').modal找不到对应的方法。
你可以打开浏览器F12查看页面源码,确保只加载一次jQuery,并且严格遵循加载顺序:
- 先加载jQuery
- 再加载Bootstrap JS
4. jQuery与Bootstrap版本不兼容
你当前使用的是jQuery 1.11.2,需要确认Bootstrap版本是否兼容:Bootstrap 3.x系列是兼容jQuery 1.x的,但如果是Bootstrap 4及以上版本,就需要jQuery 3.0+的支持。如果是版本不兼容问题,要么升级jQuery到3.x,要么降级Bootstrap到3.x版本。
5. 排查jQuery冲突问题
如果页面中引入了其他JS库(比如Prototype),可能会和jQuery产生冲突,导致$被占用。这种情况下,可以把代码里的$换成jQuery试试:
function OpenPopUp() { debugger; jQuery('#myModal').modal('show'); }
建议你按照上述顺序排查,先从第2、1点开始修复,这两个是你代码里明显的小问题,大概率能解决当前报错。
内容的提问来源于stack exchange,提问作者aparna rai

