[英]How tu update database using ajax and the PUT verb?
我正在尝试更新我的数据库中名为“Estado”的属性。 我正在使用 ajax 来做到这一点,如下所示:
function atualizaBD(idmarcador, novoEstado) {
$.ajax
({
url: `/api/IgnicoesAPI/${idmarcador}`,
type: 'PUT',
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: JSON.stringify({ Id: idmarcador, Estado: novoEstado }),
async: true,
processData: false,
cache: false,
success: function (result) {
connection.invoke("PostMarker").catch(function (err) {
return console.error(err.toString());
});
},
error: function () {
alert("ocorreu um erro!")
}
});
}
这是我的 model:
public class Ignicoes
{
public Ignicoes()
{
ListaOcorrencias = new HashSet<Ocorrencias>();
}
[Key]
public int Id { get; set; }
[Required]
public string Latitude { get; set; }
[Required]
public string Longitude { get; set; }
//estado(recusada, aceite, em avaliacao, concluido)
//public string Estado { get; set; }
[Required]
public string Estado { get; set; }
public DateTime DataInicioPropostaIgnicao { get; set; }
public DateTime DataDecisaoIgnicao { get; set; }
//lista de ocorrencias
public virtual ICollection<Ocorrencias> ListaOcorrencias { get; set; }
}
这是我的 PUT 方法:
public async Task<IActionResult> PutIgnicoes([FromRoute] int id, [FromBody] Ignicoes ignicao)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != ignicao.Id)
{
return BadRequest();
}
else
{
var dataDecisao = DateTime.Now;
var ig = _context.Ignicoes.FirstOrDefault(ignicaoId => ignicaoId.Id.Equals(id));
if (ig != null)
{
ig.Estado = ignicao.Estado;
//ig.Estado = 0;
//ig.Latitude = ignicao.Latitude;
//ig.Longitude = ignicao.Longitude;
ig.DataDecisaoIgnicao = dataDecisao;
}
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!IgnicoesExists(id))
{
return NotFound();
}
else
{
throw;
}
}
}
return NoContent();
}
我已经尝试使用此代码,但我没有更改属性“Estado”,而是更改了属性“Latitude”,并且效果很好。 我不知道为什么会这样。 “纬度”和“Estado”都是相同的类型 - 字符串。 有人可以看到错误吗? 这是我的 output 选项卡中显示的内容:
{"errors":{"Latitude":["纬度字段是必需的。"],"Longitude":["经度字段是必需的。"]},"type":"https://tools.ietf. org/html/rfc7231#section-6.5.1","title":"出现一个或多个验证错误。","status":400,"traceId":"|43114da6-4594b09a6260f1a2."}
如果您还添加了 ajax http 请求 + 响应日志(状态和有效负载),则更容易理解问题。 但是,应用程序 output 对您的 API 方法调用说 400 bad request。
根据您的资源 class 您有三个属性声明为[Required]
(Id 除外): Longitude, Latitude, Estado
,但在您的 ajax 调用中,您只传递了ID
和Estado
。 更有可能(如果您使用 asp.net 验证)您有 400 响应,因为您的 ajax 请求正文中缺少必需的属性。 尝试添加缺少的属性data: JSON.stringify({ Id: idmarcador, Estado: novoEstado, string: latitude, string: longitude })
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.