Asp.net mvc 3 在客户端上调用返回JsonResult的操作不会成功
我正在尝试使用.Net的Ajax.BeginForm提交表单并获取对象列表Asp.net mvc 3 在客户端上调用返回JsonResult的操作不会成功,asp.net-mvc-3,jsonresult,ajax.beginform,Asp.net Mvc 3,Jsonresult,Ajax.beginform,我正在尝试使用.Net的Ajax.BeginForm提交表单并获取对象列表 @using (Ajax.BeginForm("ValidateEmployee", new AjaxOptions { OnBegin = "onBegin", OnSuccess = "onSucess", UpdateTargetId = "results"} ) 问题是,当我的控制器返回一个JsonResult并且我将返回的列表转换为json时,OnSuccess回调永远不会被调用,id为“results”的d
@using (Ajax.BeginForm("ValidateEmployee", new AjaxOptions { OnBegin = "onBegin", OnSuccess = "onSucess", UpdateTargetId = "results"} )
问题是,当我的控制器返回一个JsonResult并且我将返回的列表转换为json时,OnSuccess回调永远不会被调用,id为“results”的div也不会更新。但是onBegin回调被调用。控制器看起来像这样
public JsonResult ValidateEmployee(Employee emp)
{
...
List<Role> roles = new Role();
foreach(var x in myCollection)
{
roles.Add(new Role { ID = x.ID, Name = x.Name });
}
return Json(roles);
}
public JsonResult ValidateEmployee(员工emp)
{
...
列表角色=新角色();
foreach(myCollection中的var x)
{
添加(新角色{ID=x.ID,Name=x.Name});
}
返回Json(角色);
}
我已经确认Json(roles)
能够正确地将列表转换为有效的Json。但我不能用它,因为onSuccess从不运行
奇怪的是,如果我不将该列表转换为json并将其作为.Net列表返回,则会同时命中回调和我的元素来更新输出System.Collections.Generic.list'1[Models.Role]。所以它不是json,我也没有办法使用数据
那么,当我从控制器返回json对象时,为什么不调用onSuccess呢
我使用的是MVC3,我引用的是jquery.unobtrusive-ajax.js
谢谢您的帮助。我认为您不能将
Ajax.BeginForm
与UpdateTargetId
一起用于您的场景,因为您正在使用JsonResult
作为操作的结果Ajax.BeginForm
,给定的UpdateTargetId
将尝试将结果对象附加到指定的元素。由于返回的是Json对象,因此会抛出一个错误。错误将类似于:
uncaught exception: [Exception... "Could not convert JavaScript argument arg 0
[nsIDOMDocumentFragment.appendChild]" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)"
location: "JS frame :: http://localhost:58248/Scripts/jquery-1.4.4.js :: <TOP_LEVEL> ::
line 5167" data: no]
我想你漏掉了一点@使用(Ajax.BeginForm(“ValidateEmployee”、新的AjaxOptions{OnBegin=“OnBegin”、onSuccess=“onSucess”、UpdateTargetId=“results”},并且它应该是onSuccess(大写O)哎呀。我在创建帖子时输入了错别字。编辑帖子以更正它。谢谢。你完全正确。删除
UpdateTargetId
修复了它。谢谢!我会投票支持你的答案,但没有必要的声誉:(
function onSuccess(data){
//data is the json object
// do your html manipulation here
}