Ajax调用将错误的数据发送到控制器

时间:2019-02-28 15:58:07

标签: c# jquery ajax asp.net-mvc

在下面的脚本中,我调用了一种用于管理用户权限的操作方法。第一次,一切正常,但是当我调试控制器时,变量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);
        }
      })
    }
  });
});

控制器中的代码仅用于测试一切正常。

有人知道我为什么要这么做吗?

编辑

进入方法后无需任何操作 enter image description here

此处for已完成,请查看变量的值 enter image description here

编辑2

这里是从客户端发送的值

enter image description here

1 个答案:

答案 0 :(得分:3)

可能有用的事物。

我认为创建对象来捕获这样的字段是一种很好的做法:

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