Ajax call отправляет неверные данные контроллеру - PullRequest
0 голосов
/ 28 февраля 2019

С помощью приведенного ниже сценария я вызываю метод действия для управления разрешениями пользователей.В первый раз все работает, но когда я отлаживаю контроллер, моя переменная grp получает значение usr.

Мой код просмотра

<body>
 <div class="container">
 <br />
  <table class="table table-responsive table-bordered">
    @{
        int count = 1;
        //inizialize my ef context
        dev_labelsEntities db = new dev_labelsEntities();
        //get all users stored in the db
        var users = from u in db.Users
                    orderby u.username
                    select new
                    {
                        u.username
                    };
        //get all groups from the db
        var groups = from g in db.Groups
                     orderby g.group_name
                     select new
                     {
                         g.group_name
                     };
        <tr>
            <th>Username</th>
            @foreach (var item in groups)
            {
                <td>@Html.DisplayFor(model => item.group_name)</td>
            }
        </tr>
        foreach (var item in users)
        {


            <tr>
                <td>@Html.DisplayFor(model => item.username)</td>
                @foreach (var itemG in groups)
                {
                  //in the input tag i define the values which i want to get  
                  <td><input type="checkbox" class="chkclass" 
                   username="@item.username" groupname="@itemG.group_name" 
                   id="@count" />
                   count++;
                </td>
                }
            </tr>

           }
       }            
     </table>
   </div>
 </body>

Это мой JQuery

$(document).ready(function() {
  $('.chkclass').click(function() {
    var getchkid = $(this).attr('id');
    var isChecked = $('#' + getchkid).is(':checked');
    if ($('#' + getchkid).is(':checked') == true) {

      // to be send to your call
      var username = $(this).attr('username');
      var groupname = $(this).attr('groupname');

      //here put your call ajax to your action
      $.ajax({
        type: 'Post',
        url: '/UserGroups/ManagePermission',
        dataType: 'json',
        data: {
          'usr': username,
          'grp': groupname
        },
        success: function(data) {},
        error: function(xhr, ajaxOptions, thrownError) {
          alert(thrownError);
        }
      })
    }
  });
});

Код в контроллере предназначен только для проверки того, что все работает.

Кто-нибудь знает, почему у меня такое поведение?

EDIT

После того, как войти в метод без каких-либо операций enter image description here

Здесь для завершена и посмотреть на значения переменных enter image description here

РЕДАКТИРОВАТЬ 2

Здесь значения, отправленные с клиента

enter image description here

1 Ответ

0 голосов
/ 28 февраля 2019

Пара вещей, которые могут помочь.

Я думаю, что хорошей практикой является создание объекта для перехвата полей следующим образом:

public class ManagePermissionsRequest {
    public string usr { get; set; }
    public string gpr { get; set; }
}

Затем в контроллере добавьте [FromBody]на запрос:

[HttpPost]
public ActionResult ManagePermissions([FromBody]permissionsRequest) {
   // Your code
}

Я думаю, что все получится.Иногда, хотя мне нужно структурировать данные в JQuery, стоит попробовать, если они все еще не работают:

        $.ajax({
            type: 'Post',
            url: '/UserGroups/ManagePermission',
            dataType:'json',
            data: JSON.stringify({
                'usr': username,
                'grp': groupname
            }),
            success: function (data) {
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(thrownError);
            }
        })

Примечание. Рекомендуется избегать сокращения переменных.Я мог бы пойти с «пользователь» или «имя пользователя» вместо usr

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...