CSHTML中如何将AJAX返回的jqxhr值赋值给全局@test控制表格行显隐
核心问题原因
Razor 语法中的 @test 是服务端渲染阶段的变量,仅在服务器生成页面的时候生效,当页面被发送到客户端浏览器后,服务端变量就已经销毁了。你在前端JS代码中写的@test = jqxhr 根本无法修改服务端的变量值,所以渲染出来的页面永远会用初始的true值。
可行解决方法
方案1:前端JS控制DOM显示隐藏(推荐,适配你现有AJAX逻辑)
不要用服务端变量控制,直接通过AJAX返回结果操作DOM元素的显隐,同时可以去掉废弃的async: false配置(会阻塞浏览器主线程,体验极差):
@{ var initTest = true; // 仅用于初始渲染的状态 } <script> // 确保你的项目已经引入jQuery $(function () { $.ajax({ type: 'GET', url: "你的实际请求地址", success: function (data) { // 根据接口返回的data判断显隐逻辑,比如返回true显示,false隐藏 if (data) { $('#controlTr').show(); } else { $('#controlTr').hide(); } } }); }) </script> <div class="panel panel-info"> <table> <!-- 初始状态用服务端变量控制,之后JS会接管 --> <tr id="controlTr" style="display:@(initTest ? "table-row" : "none")"> <!-- 原有tr的内容 --> </tr> </table> </div>
方案2:服务端提前请求数据
如果你不需要前端异步请求,可以直接在Razor服务端代码中请求接口拿到数据,再控制渲染逻辑:
@{ bool test = true; // 服务端同步请求接口拿数据 using (var httpClient = new System.Net.Http.HttpClient()) { var response = httpClient.GetAsync("你的实际请求地址").Result; string responseText = response.Content.ReadAsStringAsync().Result; test = bool.TryParse(responseText, out var res) ? res : test; } } <div class="panel panel-info"> <table> @if(test) { <tr> <!-- 原有tr的内容 --> </tr> } </table> </div>
内容的提问来源于stack exchange,提问作者jhgbvc
相关产品推荐
相关产品推荐

