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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:57:02