2

我有一个想要通过 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"}
4

3 回答 3

10

您是否尝试在 ajax 帖子中指定 dataType 和 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()
             }
         });
于 2012-07-25T19:02:11.650 回答
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()
             }
         });

希望有帮助!

于 2012-07-26T12:00:55.127 回答
0
{"UserID":"f9f1d175...(etc.)","UserName":"User1","Role","Admin"}

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

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

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

于 2012-07-25T19:11:04.383 回答