GridView选中行事件触发后btnSave按钮文本不更新问题
问题原因分析
这事儿核心逻辑很清晰:你的btnSave不在UpdatePanel5的范围内,而GridView触发的是局部回发(因为它被包在UpdatePanel里)。局部回发只会重新渲染UpdatePanel内部的控件,外部控件完全不在页面更新的范围内——所以哪怕后台代码确实执行了btnSave.InnerText = "Update",前端页面也不会同步这个变化,因为这个控件根本没被纳入局部刷新的清单里。
解决方案
给你几个实用的解决办法,按需挑选:
方法1:把btnSave移到UpdatePanel范围内
最直接的方式,要么把btnSave的标记代码放到UpdatePanel5内部,要么单独给它套一个新的UpdatePanel。这样局部回发时,这个按钮会被一起更新,后台设置文本的代码就能正常生效了。
方法2:用ScriptManager注册前端脚本修改文本
如果不想移动控件位置,就通过前端JS直接操作DOM来改按钮文本——局部回发后,ScriptManager可以把脚本发送到前端执行,绕过UpdatePanel的范围限制:
// 替换原来的btnSave.InnerText = "Update"; 或者在这段代码后追加 ScriptManager.RegisterStartupScript(this, this.GetType(), "UpdateBtnSaveText", $"document.getElementById('{btnSave.ClientID}').innerText = 'Update';", true);
这里要注意用btnSave.ClientID而不是直接写后台控件ID,因为如果页面用了母版页或者嵌套容器,前端生成的元素ID会和后台ID不一样,ClientID能帮你拿到正确的前端元素标识。
方法3:强制GridView触发整页回发(不推荐)
你可以给GridView设置整页回发,但这样会丢失局部刷新的优势,页面会重新加载,体验很差,除非万不得已不建议用这种方式。
内容的提问来源于stack exchange,提问作者Priom




