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

如何将JavaScript localStorage值传入ASP.NET Core Razor Pages执行SQL查询

问题分析

你之前的代码错误核心在于:Razor语法(@开头的代码)是服务器端提前执行的,而JS函数是在浏览器端运行的,两者执行时机完全脱节,直接在JS里给服务器端变量赋值会破坏JS函数结构,导致addOwl函数未定义的错误。

下面是将localStorage购物车数据写入SQL Server的便捷实现方案:


1. 前端:正确获取并发送购物车数据

通过AJAX将localStorage中的JSON数据发送到后端API,避免服务器端与客户端代码混写:

function syncCartToServer() {
    // 读取localStorage中的购物车数据
    const cartJson = localStorage.getItem('productsInCart');
    if (!cartJson) {
        alert('购物车为空,无需同步');
        return;
    }

    // 发送POST请求到后端接口
    fetch('/api/Cart/Sync', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: cartJson,
    })
    .then(res => res.json())
    .then(result => {
        result.success ? alert('购物车同步成功') : alert('同步失败:' + result.msg);
    })
    .catch(err => {
        console.error('请求异常:', err);
        alert('网络请求失败');
    });
}

页面按钮绑定函数:

<button onclick="syncCartToServer()">同步购物车到服务器</button>

2. 后端:创建API接口接收并写入数据

以ASP.NET Core为例,先定义匹配商品结构的模型:

public class CartProduct
{
    public string Name { get; set; }
    public string Tag { get; set; }
    public decimal Price { get; set; }
    public int InCart { get; set; }
}

再创建API控制器处理请求:

[ApiController]
[Route("api/[controller]")]
public class CartController : ControllerBase
{
    private readonly string _dbConnStr;

    public CartController(IConfiguration config)
    {
        _dbConnStr = config.GetConnectionString("DefaultConnection");
    }

    [HttpPost("Sync")]
    public IActionResult SyncCart([FromBody] Dictionary<string, CartProduct> cartItems)
    {
        if (cartItems == null || cartItems.Count == 0)
        {
            return BadRequest(new { success = false, msg = "无有效购物车数据" });
        }

        try
        {
            // 使用参数化查询批量插入,防止SQL注入
            using var conn = new SqlConnection(_dbConnStr);
            conn.Open();
            foreach (var product in cartItems.Values)
            {
                var sql = @"INSERT INTO CartProducts (Name, Tag, Price, Quantity)
                            VALUES (@Name, @Tag, @Price, @Quantity)";
                using var cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("@Name", product.Name);
                cmd.Parameters.AddWithValue("@Tag", product.Tag);
                cmd.Parameters.AddWithValue("@Price", product.Price);
                cmd.Parameters.AddWithValue("@Quantity", product.InCart);
                cmd.ExecuteNonQuery();
            }
            return Ok(new { success = true, msg = "数据同步完成" });
        }
        catch (Exception ex)
        {
            return StatusCode(500, new { success = false, msg = ex.Message });
        }
    }
}

3. 数据库表准备

在SQL Server中创建对应的数据表:

CREATE TABLE CartProducts (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    Name NVARCHAR(100) NOT NULL,
    Tag NVARCHAR(50) NOT NULL,
    Price DECIMAL(10,2) NOT NULL,
    Quantity INT NOT NULL,
    SyncTime DATETIME DEFAULT GETDATE()
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:45:33