MVC3 jquery ajax参数数据在控制器处为空

时间:2012-07-25 18:52:55

标签: asp.net-mvc-3 jquery kendo-ui

我有一个控制器动作,我想通过jquery调用更新。该操作会运行,但参数中没有数据。

我在一个列中使用了一个带有自定义命令的kedoui网格,我希望运行一些服务器代码。

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

该模型的类型为List< _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"}

3 个答案:

答案 0 :(得分:9)

您是否尝试在ajax post中指定数据类型和内容类型?

$.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()
             }
         });

答案 1 :(得分: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()
             }
         });

希望有所帮助!

答案 2 :(得分:0)

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

对我来说似乎不对。你不想要这个吗?

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

注意“角色”:“管理员”