0

I need to get a list permissao when I select a group, I made the methods but when I select the group, it returns me an error.

PermissaoGrupo/ObterPermissoesAdd:1 Failed to load resource: the server responded with a status of 400 ()

View

@model RKMES.Models.ViewModel.PermissaoGrupoViewModel
<script type="text/javascript" src="assets/js/plugins/forms/inputs/duallistbox.min.js"></script>
<script type="text/javascript" src="assets/js/pages/form_dual_listboxes.js"></script>
<h2>Index</h2>

<div class="form-group">
    @*<label asp-for="Grupos" class="control-label">Grupo</label>*@
    @*<select class="custom-select custom-select-sm" asp-items="@(new SelectList(Model.Grupos,"Id","Nome"))"></select>*@
    Grupos
    @Html.DropDownList("Grupos", new SelectList(Model.Grupos,"Id", "Nome"))
</div>
<!-- Filtered results -->
<div class="panel panel-flat">
    <div class="panel-heading">
        <h5 class="panel-title">Filtered results</h5>
    </div>
    <div class="panel-body">
        @*<select multiple="multiple" class="form-control listbox-no-selection" asp-items="@(new SelectList(Model.Permissoes,"Id","Nome"))"></select>*@
        @Html.DropDownList("Permissoes", new SelectList(Enumerable.Empty<SelectListItem>(), "Id", "Nome"))
    </div>
</div>
<!-- /filtered results -->
<script type="text/javascript">

    $(document).ready(function () {
        $('#Grupos').change(function () {
            var idGrupo = $('#Grupos').val();
            if (idGrupo > 0) {
                $.post('@Url.Action("ObterPermissoesAdd", "PermissaoGrupo")', { 'idGrupo': idGrupo }, function (data) {
                    if (data.length > 0) {
                        for (var i = 0; i < data.length; i++) {
                            $('#Permissoes').append('<option value="' +data[i].Id+ '">' + data[i].Nome+ '</option>');
                        }
                    }
                });
            }
        });
    });

</script>

PermissaoGrupoController

    [HttpPost]
            [ValidateAntiForgeryToken]
            public IActionResult ObterPermissoesAdd(int idGrupo)
            {
                return Json(_grupoContext.GetPermissoesAdd(idGrupo));
            }

GrupoService

public async Task<List<Permissao>> GetPermissoesAdd(int id)
        {
            return await _context.Grupo_Permissao_Permissao
                .Where(x => x.Grupo_PermissaoId == id)
                .Select(x => x.Permissao)
                .ToListAsync();
        }

Model

namespace RKMES.Models
{   // essa é uma tabela intermediaria das entidades Grupo_Permissao e Permissao
    public class Grupo_Permissao_Permissao
    {
        public int Id { get; set; }

        public int Grupo_PermissaoId { get; set; }
        public int PermissaoId { get; set; }

        public virtual Grupo_Permissao Grupo_Permissao { get; set; }
        public virtual Permissao Permissao { get; set; }
    }
}

What am I doing wrong?

1 Answer 1

1

For your issue, it is caused by ValidateAntiForgeryToken. which will check whether the request contains RequestVerificationToken header.

For a quick test, you could remove [ValidateAntiForgeryToken] from Controller.

For a recommended way, you need to attach the anti forgery token like

<script type="text/javascript">
    $(document).ready(function(){
        var Group = {
            GroupId: 1,
            GroupName: "My Group Name"
        };

        AjaxPost("/Groups/AddGroup", Group).done(function () {
            GetGroups();
        });

    });
    function gettoken() {
        var token = '@Html.AntiForgeryToken()';
        token = $(token).val();
        return token;
    }

    function AjaxPost(url, data) {
        return $.ajax({
            type: "post",
            contentType: "application/json;charset=utf-8",
            dataType: "json",
            responseType: "json",
            url: url,
            headers: {
                "RequestVerificationToken": gettoken()
            },
            data: JSON.stringify(data)
        });
    }
</script>
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.