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

ASP.NET MVC实现星级评分并保存至SQL Server的问题求助

问题修复方案:ASP.NET MVC星级评分保存到SQL Server

核心问题分析

  1. JS无法获取星级值:用$("#puntuacion").val()获取的是div元素的值,逻辑错误,需取选中的单选框值
  2. 表单绑定错误:JS监听的是#fmEmpleado的submit事件,但原form未添加该ID;提交按钮在form外部,无法触发表单提交
  3. 控制器SQL参数不匹配:JS传递了id_emp参数,但SQL语句中ID_emp写死为NULL,未使用该参数,且可能未执行SQL命令

1. 修正CSHTML代码

给form添加指定ID,将提交按钮移入form内部,确保能触发submit事件:

<form id="fmEmpleado">
    <!-- 补充JS用到的员工ID输入框,根据实际场景调整类型 -->
    <input type="hidden" id="empleado" value="目标员工ID">
    <textarea id="comentario" placeholder="请输入评价内容..." rows="3"></textarea>
    
    <div id="puntuacion">
        <p class="clasificacion">
            <input id="radio1" type="radio" name="estrellas" value="5">
            <label for="radio1">★</label>
            <input id="radio2" type="radio" name="estrellas" value="4">
            <label for="radio2">★</label>
            <input id="radio3" type="radio" name="estrellas" value="3">
            <label for="radio3">★</label>
            <input id="radio4" type="radio" name="estrellas" value="2">
            <label for="radio4">★</label>
            <input id="radio5" type="radio" name="estrellas" value="1">
            <label for="radio5">★</label>
        </p>
    </div>

    <button id="btnGuardar" class="d-block mx-auto my-3 btn btn-success" type="submit">Guardar</button>
</form>

2. 修正JS代码

修改星级值获取逻辑,补全回调函数,添加选中校验:

$("#fmEmpleado").on("submit", function (e) {
    e.preventDefault();

    let id_emp = $("#empleado").val();
    let comentario = $("#comentario").val();
    let puntuacion = $("input[name='estrellas']:checked").val();

    // 校验是否选中星级
    if (!puntuacion) {
        alert("请选择星级评分");
        return;
    }

    let datos = new URLSearchParams();
    datos.append("id_emp", id_emp);
    datos.append("puntuacion", puntuacion);
    datos.append("comentario", comentario);

    fetch("Calificacion/GuardarComentario", { method: "POST", body: datos })
        .then(resultado => resultado.json())
        .then(function (resultado) {
            console.log(resultado);
            if (resultado.estatus) {
                alert("评价保存成功");
                $("#fmEmpleado")[0].reset(); // 重置表单
            } else {
                alert("保存失败,请重试");
            }
        })
        .catch(error => {
            console.error("请求出错:", error);
            alert("网络请求失败");
        });
});

关键修改:用$("input[name='estrellas']:checked").val()获取选中的星级值,添加参数校验和错误处理


3. 修正控制器代码

匹配SQL参数,完善数据库操作逻辑:

public ActionResult GuardarComentario(string id_emp, string comentario, int puntuacion)
{
    try
    {
        // 替换为你的数据库连接字符串
        using (SqlConnection conn = new SqlConnection("Server=你的服务器名;Database=你的库名;Trusted_Connection=True;"))
        {
            conn.Open();
            string sql = "INSERT INTO RESEÑA_COMIDA (ID_emp, Comentario, Puntuacion, Fecha) " +
                         "VALUES (@id_emp, @comentario, @puntuacion, GETDATE())";
            
            using (SqlCommand cmd = new SqlCommand(sql, conn))
            {
                cmd.Parameters.AddWithValue("@id_emp", id_emp);
                cmd.Parameters.AddWithValue("@comentario", comentario);
                cmd.Parameters.AddWithValue("@puntuacion", puntuacion);
                
                int rows = cmd.ExecuteNonQuery();
                return Json(new { estatus = rows > 0 });
            }
        }
    }
    catch (Exception ex)
    {
        // 可根据需求添加日志记录
        return Json(new { estatus = false, msg = ex.Message });
    }
}

*关键修改:

  • 将SQL中ID_emp的NULL改为@id_emp,对应JS传递的参数
  • 使用using语句自动释放数据库连接,避免资源泄漏
  • 执行ExecuteNonQuery()并通过受影响行数判断操作是否成功
  • 添加异常捕获,返回错误状态*

额外注意事项

  • 确保数据库连接字符串正确配置在Web.config中
  • 若RESEÑA_COMIDA表的ID_emp是自增主键,可删除该参数,由数据库自动生成;若为外键,需保证传递的id_emp在关联表中存在
  • 可给星级单选框添加CSS样式,实现选中时星星高亮的交互效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:42:49