2012-07-25 81 views
2

我有一個控制器操作,我想通過jquery調用進行更新。該動作運行,但參數中沒有數據。MVC3 jquery ajax參數數據在控制器爲空

我在我想運行某些服務器代碼的列中使用具有自定義命令的kedoui網格。

kendoui grid in view 
... 
columns.Command(command => 
{ 
    command.Custom("ToggleRole").Click("toggleRole"); 
}); 
... 

該模型的類型列表< _AdministrationUsers>。

public class _AdministrationUsers 
{ 
    [Key] 
    [ScaffoldColumn(false)] 
    public Guid UserID { get; set; } 

    public string UserName { get; set; } 

    public string Role { get; set; } 
} 

這裏是我的toggleRole腳本:

<script type="text/javascript"> 
    function toggleRole(e) { 
     e.preventDefault(); 
     var dataItem = this.dataItem($(e.currentTarget).closest("tr")); 
     alert(JSON.stringify(dataItem)); 

     $.ajax({ 
      type: "POST", 
      url: '@Url.Action("ToggleRole", "Administration")', 
      data: JSON.stringify(dataItem), 
      success: function() { 
       RefreshGrid(); 
      }, 
      error: function() { 
       RefreshGrid() 
      } 
     }); 
    } 
</script> 

這裏是我的控制器操作:

[HttpPost] 
public ActionResult ToggleRole(string UserID, string UserName, string Role) 
{ 
    ... 
} 

控制器動作火災,但在任何參數的任何數據。

我把警報放在javascript中,以驗證「dataItem」變量中確實有數據。以下是警報文本看起來像:

{"UserID":"f9f1d175...(etc.)","UserName":"User1","Role","Admin"} 

回答

8

你嘗試指定數據類型,且在的contentType你阿賈克斯後?

$.ajax({ 
      type: "POST", 
      url: '@Url.Action("ToggleRole", "Administration")', 
      data: JSON.stringify(dataItem), 
      dataType: "json", 
      contentType: "application/json; charset=utf-8", 
      success: function() { 
       RefreshGrid(); 
      }, 
      error: function() { 
       RefreshGrid() 
      } 
     }); 
+0

這樣做。謝謝一堆! – user1304444 2012-07-25 19:32:34

+1

興趣點在這裏:dataType用於期望的返回類型,其中contentType是發送到服務器的數據。 https://api.jquery.com/jQuery.ajax/ – George 2014-04-14 18:09:51

0
{"UserID":"f9f1d175...(etc.)","UserName":"User1","Role","Admin"} 

似乎不正確我。你不想要這個嗎?

{"UserID":"f9f1d175...(etc.)","UserName":"User1","Role" : "Admin"} 

通知「角色」:「管理」

+0

對不起,我錯誤地輸入了它。我無法複製/粘貼警報消息。不錯,但是。 – user1304444 2012-07-25 19:33:33

1

它看起來像您發佈整個對象作爲一個JSON字符串,而控制器預計三根弦。如果您使用的是MVC3,則參數名稱也必須與控制器簽名匹配。嘗試解析您的數據對象,使其與控制器預期的輸入相匹配。這樣的事情:

$.ajax({ 
      type: "POST", 
      url: '@Url.Action("ToggleRole", "Administration")', 
      data: { UserID: dataItem.UserID, UserName: dataItem.UserID, Role: dataItem.Role }, 
      dataType: "json", 
      contentType: "application/json; charset=utf-8", 
      success: function() { 
       RefreshGrid(); 
      }, 
      error: function() { 
       RefreshGrid() 
      } 
     }); 

希望幫助!

+0

感謝您的回答。 GX注意到我沒有指定dataType或contentType。一旦我做到了,它就會按預期工作。我不需要解析數據。我甚至能夠擺脫(字符串,字符串,字符串),並使用我的視圖模型的控制器參數。 – user1304444 2012-07-26 20:30:20

+0

哦,很高興聽到你解決了這個問題:) – Logard 2012-07-26 21:26:48

相關問題