Позвольте мне привести вам наглядный пример.
Скажите, что ваш Model.Client.Logs содержит 2 элемента.
<tbody>
@foreach (var item in Model.Client.Logs.ToList())
{
<tr>
<td>
<input type="hidden" name="LogId" value="@item.LogId" />
<input onclick="return confirm('Are you sure you want to delete this?')" type="submit" class="btn btn-sm btn-danger" asp-page-handler="DeleteTransaction" value="Delete" />
</td>
</tr>
}
</tbody>
В результате вы получите
<tr>
<td>
<!-- First element named "LogId" -->
<input type="hidden" name="LogId" value="123" />
<input type="submit" asp-page-handler="DeleteTransaction" name="LogId" value="Delete" />
</td>
</tr>
<tr>
<td>
<!-- Second element named "LogId" -->
<input type="hidden" name="LogId" value="456" />
<input type="submit" asp-page-handler="DeleteTransaction" name="LogId" value="Delete" />
</td>
</tr>
Вы нажимаете на удаление во втором ряду.Теперь метод pagehandler будет искать html-элемент с именем LogId, который будет принимать его значение.
Но есть 2 элементов с именем LogId (не считая кнопок удаления).
Обработчик просматривает ваш DOM построчно, пока не обнаружит, что нашел то, что искал.Первый элемент с именем LogId.Отлично, теперь он может перестать смотреть.
Он нашел значение и возвращает его действию.Вот почему ваш код не работает и почему он возвращает первое найденное значение, потому что он не знает, что на самом деле есть еще элементы с именем LogId.И даже тогда он не будет знать, какой из них вы выбрали.