我有一个具有多个属性的实体列表,我使用输入字段/选择来更新列表视图中的值。以下是列表的相关部分:
@foreach (var item in Model.PDILogisticsList)
{
<tr>
<td>
@Html.DisplayFor(m => item.CommissionNumber)
</td>
<td>
<input
id="PlannedDeliveryInput"
type="datetime-local"
asp-for="@item.PlannedDelivery"
onchange="UpdateValues('@item.CommissionNumber', '@item.PlannedDelivery', '@item.CarCurrentlyInService', '@item.CarCurrentlyInBodywork', '@item.DouaneRequired')"
/>
</td>
<td>
<select
id="CarCurrentlyInServiceSelect"
asp-for="@item.CarCurrentlyInService"
onchange="UpdateValues('@item.CommissionNumber', '@item.PlannedDelivery', '@item.CarCurrentlyInService', '@item.CarCurrentlyInBodywork', '@item.DouaneRequired')"
>
<option value="True">Yes</option>
<option value="False">No</option>
</select>
</td>
<td>
<select
id="CarCurrentlyInBodyworkSelect"
asp-for="@item.CarCurrentlyInBodywork"
onchange="UpdateValues('@item.CommissionNumber', '@item.PlannedDelivery', '@item.CarCurrentlyInService', '@item.CarCurrentlyInBodywork', '@item.DouaneRequired')"
>
<option value="">Please choose...</option>
<option value="True">Yes</option>
<option value="False">No</option>
</select>
</td>
</tr>
}
JS部分:
<script>
function UpdateValues(commissionNumber, plannedDelivery, carCurrentlyInService, carCurrentlyInBodywork, douaneRequired)
{
$.ajax({
type: "POST",
url: baseUrl + '/de/UpdateValues',
data: {
commissionNumber,
plannedDelivery,
carCurrentlyInService,
carCurrentlyInBodywork,
douaneRequired
},
dataType: "json",
success: function (response) {
...
},
});
}
</script>
当其中一个选择或日期字段发生更改时,我会将该实体的所有信息发送到控制器,并将其写入数据库。
我有两个问题:
- 一些douaneRequired字段为空("(,但在
select
"中;是";为这些实体选择了,尽管我有一个选项的值为空 - 我将
onchange="UpdateValues(...)"
方法中的参数值传递给JS部分。这个调用似乎是在与asp-for
连接的属性发生值更改之前触发的,因为它总是在发送更改之前的值
有办法解决这个问题吗?我试图使用直接的jquery选择器onchange="UpdateValues('@item.commissionNumber', $('#CarCurrentlyInServiceSelect').val()
传递值,但这当然只给了我列表中第一个实体的值。
谢谢Hopeless,渲染时间与运行时间的信息确实帮助了我。
为了让我更容易,我做了以下操作:
-
为我稍后要写回的每个属性添加了一个唯一的密钥:
-
通过四个属性的唯一键检索它们的值。
<td> <input id="PlannedDeliveryInput_@item.CommissionNumber" type="datetime-local" asp- for="@item.PlannedDelivery" onchange="UpdateValues('@item.CommissionNumber')"/> </td> <td> <select id="CarCurrentlyInServiceSelect_@item.CommissionNumber" </td> function UpdateValues(commissionNumber) { $.ajax({ type: "POST", url: baseUrl + '/de/SAM/UpdatePDILogisticsUsedCar', data: { commissionNumber, plannedDelivery: $('#PlannedDeliveryInput_' + commissionNumber).val(), carCurrentlyInService: $('#CarCurrentlyInServiceSelect_' + commissionNumber).val(), carCurrentlyInBodywork: $('#CarCurrentlyInBodyworkSelect_' + commissionNumber).val(), douaneRequired: $('#PlannedDeliveryInput_' + commissionNumber).val(), }, dataType: "json", success: function (response) { if (response == "1") $.growl({ title: "Änderung gespeichert", message: "Die Änderung wurde erfolgreich gespeichert!" }); else $.growl.error({ message: "Änderung konnte nicht gespeichert werden!" }); }, }); }