2017-04-15 58 views
0

我的代碼有問題。 jquery ajax不起作用。我的jQuery腳本是這樣的:jquery ajax不起作用(服務器端是ASP.net)

$('#AddPermission').click(function() { 
    var _permissionId = $('#PermissionId').val();    
    var _roleId = $('#Role_Id').val(); 
    if (_permissionId == '') { 
     return false; 
    } 
    var _parameters = { permissionId: _permissionId, id: _roleId }; 
    console.log(_parameters); 
    $.ajax({ 
     url: "/Admin/AddPermission2RoleReturnPartialView", 
     type: "GET", 
     data: _parameters, 
     success: function (data, textStatus, jqXHR) { 
      console.log(data); 
      $('#PermissionsTable').html(data); 
      $('#PermissionId').val(""); 
     }, 
     error: function (xhr, textStatus, errorThrown){ 
      console.log(errorThrown); 
     } 
    }); 
}); 

我的服務器端ASP編寫的劇本是這樣的:

[HttpGet] 
     [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 
     [ValidateAntiForgeryToken] 
     public PartialViewResult AddPermission2RoleReturnPartialView(int id, int permissionId) 
     { 
      Response.Write("Code1"); 
      ROLE role = database.ROLES.Find(id); 
      PERMISSION _permission = database.PERMISSIONS.Find(permissionId); 

      if (!role.PERMISSIONS.Contains(_permission)) 
      { 
       role.PERMISSIONS.Add(_permission); 
       database.SaveChanges(); 
      } 
      return PartialView("_ListPermissions", role); 
     } 

當控制檯運行此,我給了這些數據:

對象{permissionId:「39」,id:「3」}

內部服務器錯誤

有人可以幫我嗎?

回答

1

的方法刪除ValidateAntiForgeryToken屬性,你不與令牌只是調用Ajax發佈形式,並嘗試使用jquery

$.ajax({ 
     url: "@Url.Action("ActionName", "ControllerName")", 
     type: "GET", 
     data: $.param(_parameters), 
     success: function (data, textStatus, jqXHR) { 
     console.log(data); 
     }, 
     error: function (xhr, textStatus, errorThrown) { 
     console.log(errorThrown) 
     } 
    }); 
+0

TNX,我刪除'ValidateAntiForgeryToken'並正確的工作。但爲什麼?! –

+0

我在代碼中有@@ Html.AntiForgeryToken()' –

0

的PARAM功能包Ajax調用的參數,如果你確實有AntiForgeryToken在HTML比你要發送的參數。例如,如果我有一個方法在我的控制器一樣

[AcceptVerbs(HttpVerbs.Post)] 
[ValidateAntiForgeryToken] 
public ActionResult GetResult(int? id, int? someValue) 
{ 
    return PartialView("TestPartial"); 
} 

而且在查看HTML看起來像

<div class="somediv"> 
@Html.AntiForgeryToken() 
<button class="btn btn-primary" id="btnTest">Test Me</button> 
</div> 
<div id="someId"></div> 

最後jQuery代碼將

$("#btnTest").click(function (e) { 
    e.preventDefault(); 
     var p = { id: 123, someValue: 1234, __RequestVerificationToken: 
       $("input[name='__RequestVerificationToken']").val() }; 
     $.ajax({ 
     type: "POST", 
     url: "@Url.Action("GetResult", "ControllerName")", 
     data: $.param(p), 
     dataType: "application/json", 
     complete: function (data) { 
       $("#someId").empty().append(data.responseText); 
      } 
     }); 
}); 

確保方法接受動詞類型應該是POST