c # обновление только значений с входными данными в представлении с помощью страницы бритвы с CORE инфраструктуры сущностей

Я использую страницы бритвы и EF CORE, извлекаю значения из базы данных и помещаю их в представление вот так.

<input asp-for="theModel.theValue1" class="form-control" />

используя BindProperty

[BindProperty]
public theModel theModel { get; set; }

Пока что по документации. У меня есть еще одно значение в модели, называемое theValue2, которое должно оставаться неизменным при отправке этого представления. Если я сохраню вид, используя

_context.Attach(theModel).State = EntityState.Modified;
await _context.SaveChangesAsync();

тогда theModel.theValue2 имеет значение null, поскольку у меня нет соответствующего ввода в самом представлении, что, как и следовало ожидать, с безгражданством.

Это единственный способ сохранить значения между правками, чтобы поместить скрытый ввод в представление для каждого свойства в модели, например так.

<input type="hidden" asp-for="theModel.theValue2" />

или есть более элегантный способ сказать либо «обновлять только theModel.theValue1», либо «не обновлять theModel.theValue2»?


person Community    schedule 13.02.2018    source источник


Ответы (2)


Это единственный способ передачи ваших данных между постбэками, но он небезопасен. Посетителю вашего веб-приложения очень легко изменить значение скрытого ввода.

Обычно я снова читаю данные из базы данных, когда пользователь публикует данные, и устанавливаю новые значения для объекта, который я извлек из базы данных (в вашем случае вы установите значение для свойства Model), и сохраняю измененный объект обратно в базу данных.

person pitaridis    schedule 13.02.2018

Не на моем компьютере сейчас, но я уверен, что вы могли бы так что-то вроде

_context.Entry(theModel).Property(t => t.theValue2).IsModified = false;

Перед вызовом сохранения.

person Niko    schedule 14.02.2018