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

ASP.NET MVC租车系统问题:车牌无数据回显&日期差计算实现

嘿,我来帮你搞定这个租车系统的问题!你现在遇到的核心问题是输入车牌后没反应,连Customer ID都出不来,咱们从前端到后端一步步排查并解决,顺便把日期差计算也安排明白。

首先,先揪出你可能踩的核心坑

你之前写的SQL里用了car_id,但实际数据库字段是carno,这大概率是查不到数据的关键原因!咱们先把这个最容易忽略的点修正,再一步步搭好前后端逻辑。


第一步:修正后端ReturnController的查询逻辑

我假设你用Entity Framework来操作数据库(如果用ADO.NET也可以类似调整),先写一个能接收车牌参数、查询数据并返回JSON的Action:

public class ReturnController : Controller
{
    // 替换成你的数据库上下文类
    private readonly RentalDbContext _dbContext = new RentalDbContext();

    // 处理前端的车牌查询请求
    public JsonResult GetCarDetails(string carno)
    {
        if (string.IsNullOrWhiteSpace(carno))
        {
            return Json(new { success = false, msg = "请输入有效的车牌" }, JsonRequestBehavior.AllowGet);
        }

        // 重点:用数据库实际字段carno查询,不是之前的car_id
        var rentalRecord = _dbContext.Rentals
            .FirstOrDefault(r => r.carno == carno);

        if (rentalRecord == null)
        {
            return Json(new { success = false, msg = "未找到该车辆的租赁记录" }, JsonRequestBehavior.AllowGet);
        }

        // 计算逾期天数:当前日期减去到期日edate,负数说明未逾期,取0
        TimeSpan dateDiff = DateTime.Now - rentalRecord.edate;
        int overdueDays = dateDiff.Days >= 0 ? dateDiff.Days : 0;

        // 返回前端需要的所有数据
        return Json(new
        {
            success = true,
            custId = rentalRecord.custid,
            fee = rentalRecord.fee,
            startDate = rentalRecord.sdate.ToString("yyyy-MM-dd"),
            endDate = rentalRecord.edate.ToString("yyyy-MM-dd"),
            overdueDays = overdueDays
        }, JsonRequestBehavior.AllowGet);
    }
}

如果用ADO.NET的话,查询语句要改成参数化形式(避免SQL注入):

string sql = "SELECT custid, fee, sdate, edate FROM rental WHERE carno = @carno";
// 用SqlCommand执行查询,参数@carno绑定传入的carno值,这里就不展开写完整代码了

第二步:修正前端表单与jQuery请求

先给你一个标准的表单结构(如果你的已有表单和这个类似,直接调整jQuery即可):

<div class="rental-form">
    <div>
        <label>车牌ID:</label>
        <input type="text" id="inputCarno" placeholder="请输入车牌">
        <button type="button" id="searchBtn">查询车辆信息</button>
    </div>
    <hr>
    <div>
        <label>客户ID:</label>
        <input type="text" id="custId" readonly>
    </div>
    <div>
        <label>基础租车费用:</label>
        <input type="text" id="fee" readonly>
    </div>
    <div>
        <label>起始日期:</label>
        <input type="text" id="startDate" readonly>
    </div>
    <div>
        <label>到期日期:</label>
        <input type="text" id="endDate" readonly>
    </div>
    <div>
        <label>逾期天数:</label>
        <input type="text" id="overdueDays" readonly>
    </div>
</div>

然后是修正后的jQuery请求,确保参数、路由和后端完全匹配:

$(document).ready(function() {
    // 绑定查询按钮点击事件
    $("#searchBtn").click(function() {
        var carno = $("#inputCarno").val().trim();
        if (!carno) {
            alert("请先输入车牌!");
            return;
        }

        $.ajax({
            // 路由要和后端Controller/Action一致,注意大小写(ASP.NET MVC路由不敏感,但尽量统一)
            url: "/Return/GetCarDetails",
            type: "GET",
            // 参数名必须和后端Action的参数名完全一致(这里是carno)
            data: { carno: carno },
            dataType: "json",
            success: function(res) {
                if (res.success) {
                    // 把后端返回的数据填充到对应的文本框
                    $("#custId").val(res.custId);
                    $("#fee").val(res.fee);
                    $("#startDate").val(res.startDate);
                    $("#endDate").val(res.endDate);
                    $("#overdueDays").val(res.overdueDays);
                } else {
                    alert(res.msg);
                    // 清空所有结果框
                    $("#custId, #fee, #startDate, #endDate, #overdueDays").val("");
                }
            },
            error: function(xhr, status, err) {
                alert("查询出错啦:" + err);
                // 打开F12控制台看Network标签,能看到具体的错误信息,方便调试
                console.log("请求错误详情:", xhr.responseText);
            }
        });
    });

    // 给输入框加回车触发查询的功能,提升用户体验
    $("#inputCarno").keypress(function(e) {
        if (e.which === 13) {
            $("#searchBtn").click();
        }
    });
});

第三步:调试验证的关键步骤

  1. 先测后端接口:直接在浏览器地址栏输入http://localhost:你的端口号/Return/GetCarDetails?carno=你的示例车牌,看是否返回正确的JSON数据。如果返回错误,先排查数据库连接、查询语句是否正确。
  2. 再测前端交互:输入车牌点击查询,打开浏览器F12的Network标签,看AJAX请求是否发送成功,返回的状态码是不是200,有没有拿到后端返回的JSON。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:00:45