В моем Index.cshtm у меня есть две кнопки, и если нажата одна из этих кнопок, я хочу обновить свойство в моей базе данных. Например, у меня есть маркер с состоянием «принято», и когда я щелкаю информационное окно этого маркера, у меня есть возможность выбрать 2 состояния («отказано», «другое»). Если я нажму кнопку «Отклонено», состояние этого маркера (которое ранее было «принято») изменится на «Отказано» в моей базе данных. Для этого я использую метод PUT и ajax на стороне клиента. Однако при попытке изменить состояние маркера выдает ошибку. Вот код на стороне клиента:
function atualizaBD(newState) {
$.ajax
({
url: `/api/IgnicoesAPI/${id}`,
type: 'PUT',
data: JSON.stringify({
State: newState
}),
success: function (result) {
alert('State Updated');
},
error: function () {
alert("Error")
}
});
}
Вот код одной из кнопок:
function denied() {
var conclued = L.icon({
iconUrl: ' https://cdn1.iconfinder.com/data/icons/modifiers-essential-glyph-1/48/Mod_Essentials-24-256.png',
iconSize: [35, 35]
});
if (clickedmarker) {
clickedmarker.setIcon(denied);
}
clickedmarker = null;
atualizaBD("denied");
connection.invoke("PostMarker").catch(function (err) {
return console.error(err.toString());
});
}
Вот код моего контроллера:
[HttpPut("{id}")]
public async Task<IActionResult> PutIgnicoes([FromRoute] int id, [FromBody] Ignicoes ignicao, string newState)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != ignicao.Id)
{
return BadRequest();
}
var decisionDate= DateTime.Now;
var ig = _context.Ignicoes.FirstOrDefault(ignicaoId => ignicaoId.Id.Equals(id));
ig.State= newState;
ig.Latitude = ignicao.Latitude;
ig.Longitude = ignicao.Longitude;
//esta data vai depender da avaliação de cada uma das ocorrencias
ig.DataInicioPropostaIgnicao = ignicao.DataInicioPropostaIgnicao;
ig.DataDecisaoIgnicao = decisionDate;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!IgnicoesExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}