Ajax 我想使用PUT方法来更新数据库中的变量。我需要在每次单击按钮时更新该变量

Ajax 我想使用PUT方法来更新数据库中的变量。我需要在每次单击按钮时更新该变量,ajax,asp.net-core,put,Ajax,Asp.net Core,Put,在我的Index.cshtm上有两个按钮,如果单击其中一个按钮,我想更新数据库中的属性。例如,我有一个状态为“接受”的标记,当我单击该标记的信息窗口时,我可以选择2个状态(“拒绝”、“其他”)。如果我按下“拒绝”按钮,该标记的状态(以前为“接受”)将在我的数据库上更改为“拒绝”。为此,我在客户端使用PUT方法和ajax。但是,当我试图更改标记的状态时,它会给我一个错误。 以下是客户端的代码: function atualizaBD(newState) { $.aja

在我的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();
    }
[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;设置是的。这正是你在上面的回答中所做的