Ajax 我想使用PUT方法来更新数据库中的变量。我需要在每次单击按钮时更新该变量
在我的Index.cshtm上有两个按钮,如果单击其中一个按钮,我想更新数据库中的属性。例如,我有一个状态为“接受”的标记,当我单击该标记的信息窗口时,我可以选择2个状态(“拒绝”、“其他”)。如果我按下“拒绝”按钮,该标记的状态(以前为“接受”)将在我的数据库上更改为“拒绝”。为此,我在客户端使用PUT方法和ajax。但是,当我试图更改标记的状态时,它会给我一个错误。 以下是客户端的代码:Ajax 我想使用PUT方法来更新数据库中的变量。我需要在每次单击按钮时更新该变量,ajax,asp.net-core,put,Ajax,Asp.net Core,Put,在我的Index.cshtm上有两个按钮,如果单击其中一个按钮,我想更新数据库中的属性。例如,我有一个状态为“接受”的标记,当我单击该标记的信息窗口时,我可以选择2个状态(“拒绝”、“其他”)。如果我按下“拒绝”按钮,该标记的状态(以前为“接受”)将在我的数据库上更改为“拒绝”。为此,我在客户端使用PUT方法和ajax。但是,当我试图更改标记的状态时,它会给我一个错误。 以下是客户端的代码: function atualizaBD(newState) { $.aja
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();
}
[HttpPut(“{id}”)]
公共异步任务PutIgncoes([FromRoute]int id,[FromBody]Igncoes IgncoE,字符串newState)
{
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
if(id!=ignitcao.id)
{
返回请求();
}
var decisionDate=DateTime.Now;
var ig=_context.Ignicoes.FirstOrDefault(ignicoId=>ignicoId.Id.Equals(Id));
ig.State=newState;
ig.纬度=IGNCAO.纬度;
ig.经度=IGNCAO.经度;
//这一数据依赖于《奥科雷迪亚斯宪章》中的阿瓦利亚ão数据
ig.DATAINICIOPROSSTAIGNICAO=ignicao.DATAINICIOPROSSTAIGNICAO;
ig.DataDecisaoIgnicao=决策日期;
尝试
{
wait_context.SaveChangesAsync();
}
catch(DbUpdateConcurrencyException)
{
如果(!性别歧视者(id))
{
返回NotFound();
}
其他的
{
投掷;
}
}
返回NoContent();
}
首先,您应该确认url中的${id}
已填充,因为PUT操作需要路由中的id
。在ajax中,您错过了contentType
,将值设置为application/json;charset=utf-8
如果传递json字符串:
function atualizaBD(newState) {
$.ajax
({
url: `/api/IgnicoesAPI/5`, // pass {id}
type: 'PUT',
contentType: "application/json; charset=utf-8",
data: JSON.stringify({
State: newState
}),
success: function (result) {
alert('State Updated');
},
error: function () {
alert("Error")
}
});
}
在服务器端,您可以定义一个模型来接受从客户端发送的值,如果您想发送更多数据,除了状态
,请使用[FromBody]
进行模型绑定:
[HttpPut("{id}")]
public void PutIgnicoes([FromRoute] int id, [FromBody]myValue myValue)
{
var state = myValue.State;
}
public class myValue {
public string State { get; set; }
}
它给我一个错误,说“加载资源失败:服务器响应状态为400()”,我不确定为什么要检查模型类中的属性,它们是
public
和get;设置是的。这正是你在上面的回答中所做的