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

问题描述 投票:0回答:1

在我的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();
    }
ajax asp.net-core put
1个回答
0
投票

[第一件事是您应该确认url中的${id}已填充,因为PUT操作需要route中的id。而且您错过了ajax中的contentType,如果传递json字符串,则将值设置为application/json; charset=utf-8

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")
        }
    });
}

并且在服务器端,如果要发送除State之外的更多数据,则可以定义一个模型来接受从客户端发送的值,请使用[FromBody]进行模型绑定:

[HttpPut("{id}")]
public void PutIgnicoes([FromRoute] int id,   [FromBody]myValue myValue)
{
   var state = myValue.State;
}

public class myValue {
   public string State { get; set; }
}
© www.soinside.com 2019 - 2024. All rights reserved.