2012-07-25 29 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

相关问题