我有一个控制器动作,我想通过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"}
答案 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"}
注意“角色”:“管理员”