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
相关产品推荐
相关产品推荐

