Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 在客户端上调用返回JsonResult的操作不会成功_Asp.net Mvc 3_Jsonresult_Ajax.beginform - Fatal编程技术网

Asp.net mvc 3 在客户端上调用返回JsonResult的操作不会成功

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

我正在尝试使用.Net的Ajax.BeginForm提交表单并获取对象列表

@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
}