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

如何在JavaScript Ajax中正确获取C#控制器返回的布尔值

问题根因

你的判断逻辑不生效的核心原因是:后端从来没有返回过布尔类型值。
两个逻辑分支最终都是return View(),返回给前端的永远是HTML格式的字符串:

  • 有数据时:返回绑定了DataTable内容的渲染后视图HTML
  • 无数据时:返回未绑定数据的空状态视图HTML
    当前前端设置dataType: "html",接收到的result始终是字符串类型。JS里非空字符串做布尔判断时永远为true,字符串类型的值也不可能等于布尔值true,所以不管有没有数据,都会走第一个渲染轮播的分支。
    另外你现有C#代码里存在逻辑问题:SqlDataReader会独占数据库连接,你之前手动关闭再重开连接的写法不仅冗余,还容易触发连接异常;SqlDataAdapter的Fill方法本身会自动管理连接开关,不需要手动重复操作。
可行解决方案

你可以根据自己的代码习惯选以下任意一种实现:

方案1:保留原有HTML返回逻辑,通过响应头传递状态(改动最小)

不需要调整视图返回逻辑,只需要在后端两个分支给响应加自定义标记头,前端从响应头读取状态判断即可。

后端C#代码修改

using (SqlConnection con = new SqlConnection(constring))
{
    string command = "select item_image, item_name, item_price item_number, item_type, date_added from cooking_items";
    con.Open();
    using (SqlCommand cmd = new SqlCommand(command, con))
    {
        cmd.CommandTimeout = 60;
        SqlDataReader Creader1 = cmd.ExecuteReader();
        if (Creader1.HasRows)
        {
            // 标记有数据
            Response.Headers.Add("X-Has-Data", "true");
            Creader1.Close(); // 关闭独占连接的DataReader再执行后续查询
            DataTable dt = new DataTable();
            using (SqlDataAdapter da = new SqlDataAdapter(cmd))
            {
                da.Fill(dt);
            }
            return View("Cooking", dt);
        }
        else
        {
            // 标记无数据
            Response.Headers.Add("X-Has-Data", "false");
            Creader1.Close();
            return View("Cooking");
        }
    }
}

前端Ajax代码修改

success回调接收第三个参数xhr,从中读取自定义响应头判断状态:

$.ajax({
    url: "/Shop/Accessories",
    contentType: "application/html; charset=utf-8",
    type: 'GET',
    dataType: "html",
    success: function (result, status, xhr) {
        const hasData = xhr.getResponseHeader('X-Has-Data') === 'true';
        if (hasData) {
            $('#owl1').html(result)
            $('#owl1').owlCarousel({
                loop: true,
                nav: false,
                dots: false,
                autoplay: false,
                margin: 10,
                responsive: {
                    0: { items: 2 },
                    600: { items: 3 },
                    1000: { items: 4 }
                }
            })
        } else {
            $(".noItem1").html(result);
        }
    },
    error: function (xhr, status) {
        alert(status);
    }
})

方案2:返回结构化JSON响应(更符合接口规范)

后端不再直接返回View,而是先把视图渲染成HTML字符串,和布尔状态值打包成JSON结构返回,前端直接读取JSON里的布尔字段判断即可。
这种方案需要额外实现一个将视图渲染为字符串的辅助方法,适合后续接口需要扩展更多返回字段的场景使用。


内容的提问来源于stack exchange,提问作者新Acesyyy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:24:24