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

MVC中下拉框选择自动填充@Html.EditorFor的技术求助

解决MVC下拉框选择后自动填充文本框的问题

嘿,我一眼就看出问题所在了!你当前的jQuery代码是把后端返回的数据往下拉框里添加选项,但你的Company_Registration_Number是用EditorFor生成的文本框,这完全不匹配啊!咱们得调整代码逻辑,适配文本框的赋值需求,同时优化后端的返回数据。

第一步:优化控制器代码

SupplierID应该是供应商表的主键吧?根据单个ID查询肯定只会返回一条数据,没必要返回列表,直接返回单个对象更高效:

public JsonResult GetCompanyRegistrationNumberId(int id)
{
    var supplier = db.Suppliers.FirstOrDefault(p => p.SupplierID == id);
    if (supplier == null)
    {
        return Json(null, JsonRequestBehavior.AllowGet);
    }
    return Json(new { CompanyRegNumber = supplier.Company_Registration_Number }, JsonRequestBehavior.AllowGet);
}

第二步:修改jQuery逻辑(核心修复)

把原来操作下拉框的代码改成给文本框赋值,不需要循环添加选项,直接用val()方法设置值就行:

$(function () {
    // 初始状态:如果没选供应商,清空文本框并设为只读(可选)
    if ($("#SupplierID").val() === '0') {
        $("#Company_Registration_Number").val('').prop('readonly', true);
    }

    $("#SupplierID").change(function () {
        var selectedSupplierId = $(this).val();
        var regNumberInput = $("#Company_Registration_Number");

        // 如果选了默认选项,清空文本框
        if (selectedSupplierId === '0') {
            regNumberInput.val('').prop('readonly', true);
            return;
        }

        $.ajax({
            cache: false,
            type: "GET",
            url: '@Url.Action("GetCompanyRegistrationNumberId", "Order")',
            data: { id: selectedSupplierId },
            success: function (data) {
                if (data) {
                    // 给文本框赋值
                    regNumberInput.val(data.CompanyRegNumber);
                    // 这里可以根据需求决定是否允许编辑文本框
                    regNumberInput.prop('readonly', false);
                } else {
                    regNumberInput.val('');
                }
            },
            error: function () {
                alert('加载供应商注册编号出错了!');
            }
        });
    });
});

第三步:确认Razor视图的正确性

你的视图代码没问题,EditorFor会生成文本框,而且你已经指定了正确的ID,这里可以保持不变:

<div class="form-group">
    @Html.LabelFor(model => model.Company_Registration_Number, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.Company_Registration_Number, new { @id = "Company_Registration_Number" })
        @Html.ValidationMessageFor(model => model.Company_Registration_Number, "", new { @class = "text-danger" })
    </div>
</div>

额外小贴士

  • 确保SupplierID下拉框的默认选项值是0,和你代码里的判断逻辑一致
  • 如果不希望用户手动修改注册编号,可以把文本框设为只读,保证数据和选中的供应商一致
  • 后端用FirstOrDefault比Where(...).ToList()更高效,因为主键查询只会返回一条数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:32:31