SSO登录后首次提交修改不生效 缓存相关故障如何排查?
排查方案
1. 验证Kendo组件初始化状态
- 在
GetNodeValue函数开头添加日志,打印$("#treeviewTab").data("kendoTreeView")、$("#treeviewExternal").data("kendoTreeView")两个对象,确认首次提交时两个组件是否已经完成初始化。如果输出为undefined,说明用户点击保存时组件还没加载完成,自然拿不到选中的节点值。 - 临时在函数末尾加日志打印
checkedMenuIds和$(myControls.HdnSelectedMenuIds).val()的取值,直接确认首次提交时是赋值环节出错还是取值环节出错。
2. 修正隐藏域选择器逻辑
ASP.NET WebForm控件默认会自动生成客户端ID,若页面使用了母版页、嵌套用户控件,SSO跳转后生成的客户端ID可能和预期不符,导致选择器拿不到目标DOM:
- 给隐藏域强制设置固定客户端ID:
<asp:HiddenField ID="HdnSelectedMenuIds" runat="server" ClientIDMode="Static" />
- JS里直接用ID选择器取值赋值,避免依赖动态生成的
myControls对象:
$('#HdnSelectedMenuIds').val(checkedMenuIds);
3. 处理异步加载时序问题
如果KendoTreeView的菜单数据是异步请求加载的,首次SSO跳转后用户点击保存时,数据源还没请求完成,treeView.dataSource.view()只会拿到空数组:
- 给两个KendoTreeView都绑定
dataBound事件,只有两个组件都完成数据加载后,才将保存按钮设置为可点击状态,之前保持置灰禁用。 - 如果菜单数据量不大,可以改为服务端渲染初始菜单数据,避免异步加载的时序差。
4. 排查页面回发逻辑
- 在后端
btnSave_Click方法开头添加日志,打印Request.Form["HdnSelectedMenuIds"]的原始值,确认是否是前端确实没有传对值,还是后端逻辑里把值覆盖了。 - 检查页面
Page_Load方法里的IsPostBack判断,确认首次回发时没有重新给HdnSelectedMenuIds赋值覆盖前端传入的内容。
5. 校验SSO跳转后的页面加载完整性
- 打开浏览器开发者工具的网络面板,复现故障场景,检查首次跳转回站点A时,页面、JS资源有没有加载失败,有没有出现JS执行报错。
- 可以在页面响应头强制添加缓存禁用配置,彻底避免304缓存:
Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetNoStore(); Response.Cache.SetExpires(DateTime.MinValue);
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

