在<select>模型绑定之前触发的更改方法



我有一个具有多个属性的实体列表,我使用输入字段/选择来更新列表视图中的值。以下是列表的相关部分:

@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>

当其中一个选择或日期字段发生更改时,我会将该实体的所有信息发送到控制器,并将其写入数据库。

我有两个问题:

  1. 一些douaneRequired字段为空("(,但在select"中;是";为这些实体选择了,尽管我有一个选项的值为空
  2. 我将onchange="UpdateValues(...)"方法中的参数值传递给JS部分。这个调用似乎是在与asp-for连接的属性发生值更改之前触发的,因为它总是在发送更改之前的值

有办法解决这个问题吗?我试图使用直接的jquery选择器onchange="UpdateValues('@item.commissionNumber', $('#CarCurrentlyInServiceSelect').val()传递值,但这当然只给了我列表中第一个实体的值。

谢谢Hopeless,渲染时间与运行时间的信息确实帮助了我。

为了让我更容易,我做了以下操作:

  1. 为我稍后要写回的每个属性添加了一个唯一的密钥:

  2. 通过四个属性的唯一键检索它们的值。

    <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!" });
    },
    });
    }
    

最新更新