В Blazor нет «magi c». У него нет возможности узнать, какие именно строки были обновлены, если вы не отслеживаете это. И это только половина дела. Ваш код - метод Save()
, фактически отправляет на сервер полный массив data
.
Похоже, что вы ищете, чтобы решить обе эти проблемы. Для этого вам понадобятся:
- Logi c для отслеживания измененных строк и возможного сохранения их в отдельном массиве
- Обновите метод
Save
, чтобы вместо этого использовать этот новый список , чтобы отправлять на сервер только данные из измененных строк, а не весь набор данных.
Часть, которая здесь c определена Blazor, - это то, как вы фактически обнаруживаете строки, которые были изменены . На самом деле вы можете упростить это, немного изменив свою модель данных, введя logi c отслеживания состояния и предоставив его через свойство. Следующее - только простая демонстрация:
public class ConcernData
{
internal bool StateChanged {get; private set;}
public bool PassingAllowed
{
get => _passingAllowed;
set
{
if (value != _passingAllowed)
{
_passingAllowed = value;
StateChanged = true;
}
}
}
// Similar change detection logic goes for the rest of the properties
}
Обратите внимание, что это очень наивная реализация, которая не учитывает ситуации, когда пользователи снова меняют данные обратно на их исходное значение. Но это позволит вам обновить метод Save
следующим образом:
private async Task Save()
{
await Http.PostAsJsonAsync<ConcernData[]>("ConcernFilter/Update", data.Where(c=>c.StateChanged)).ConfigureAwait(false);
}
Надеюсь, это поможет.