我有一个表单,其中包含一些从 AJAX 请求的结果中填充的输入。当我提交表单时,我只能null在后端得到。我尝试提交值而不编辑它并且它有效这是我的java脚本代码editPayment = function() { if ($('#entrytransId').val() != '') { if ($('#entryReceiptTypesselect').val() == "1") { $.ajax({ type: "GET", url: "@Url.Action("GetInvoiceNumber", "Payment")", data: {transId: $('#entrytransId').val()}, success: function(response) { if (response.invNo == 0) { window.location.reload(); } else { $('#reciptNo').val(response.invNo); $('#enteryAmt').val(response.Amt); $('#entrytransId').attr("disabled", "true"); $('#enteryhide').show(500); } }, error: function(reponse) { window.location.reload(); } }); } }这正是我的 HTML 表单,我尝试了更多次输入,但失败了,但是当我删除 javascript 函数并手动填充数据时,它的工作原理<form action="/Payment/EditPayment" id="MF" method="post"> <div class="row"><div class="col-md-2"> <label class="form-control">Receipt Type</label></div><div class="col-md-8"><select class="form-control" id="entryReceiptTypesselect" name="entryReceiptTypes" required="true"><option value="">-Choose</option><option value="1">MoF</option><option value="2">Zakah</option><option value="3">Tax</option><option value="4">Other Taxs</option><option value="5">M & S</option></select> </div></div><div class="row"> <div class="col-md-2"> <label class="form-control">Trans Id</label> </div> <div class="col-md-3"> <input required="" type="number" class="form-control" id="entrytransId" name="entrytransId"> </div> <div class="col-md-2" hidden="" id="btnHidden"> <button type="button" class="btn btn-primary legitRipple" onclick="editPayment()">check</button> </div></div>
2 回答
杨__羊羊
TA贡献1943条经验 获得超7个赞
问题是$('#entrytransId').attr("disabled", "true");
我有另一个功能onselectChange()
被禁用了所有输入,我试过了$('#entrytransId').attr("disabled", "true");
,它运行良好
陪伴而非守候
TA贡献1757条经验 获得超8个赞
问题不在于通过 javascript/jquery 设置值,而在于将输入设置为disabled。
$('#entrytransId').attr("disabled", "true");
当输入设置为 时disabled
,它不会包含在表单的 POST 中(被排除在外),因此会像null
在服务器端代码中一样出现。
您可以: - 不将它们设置为禁用(会影响您的用户体验) - 在 POST 之前启用它们(icky) - 使用隐藏字段
MVC 为复选框执行此操作,因此您可以在此处复制该想法:
<input type='text' name='entryid' /> <input type='hidden' name='entryid' />
POST 使用输入的name
字段,而不是它的id
,因此可以有多个具有相同名称的输入。
然后 POST 将使用未禁用的第一个输入(因此不要将隐藏的输入放在第一位...)
然后只需更新 jquery 以将值应用于两个输入(如果您还希望它显示在 UI 中)而不是通过 id,例如:
$("name[entryid]").each(function() { $(this).val(newvalue); });
(其他设置方法可能更好,不检查是否.val()
适用于所有,可能仅适用于第一个)
添加回答
举报
0/150
提交
取消