我有一个淘汰模型被发布到 AJAX 以在下拉值更改时加载数据。当我尝试获取该数据时,我收到此错误:
System.InvalidOperationException:由于对象的当前状态,操作无效。生成时间:格林威治标准时间 2013 年 6 月 6 日星期四 21:56:30
System.InvalidOperationException:由于对象的当前状态,操作无效。在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth) 在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth) 在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth) 在 System .Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth) 在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth) 在
我在 web.config 中尝试了这两种设置:
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="20000" />
<add key="aspnet:MaxJsonDeserializerMembers" value="20000" />
</appSettings>
在超高的数字。那并没有解决问题。我不确定问题是什么。这是我对下拉列表的看法:
@Html.DropDownListFor(x => x.ParentUser, new SelectList(Model.ParentUsers, "Id", "DisplayName"), "--Select a " + @Model.ParentRole.DisplayName + "--")
我的行动:
[HttpPost]
public JsonResult GetAssignedUsers(KeyValueModel assigneeRole, KeyValueModel parentRole, Guid parentUser)
{
Role assignee = _roleService.GetOne(x => x.Id == assigneeRole.Id);
Role parent = _roleService.GetOne(x => x.Id == parentRole.Id);
User parentUsr = _userService.GetOne(x => x.Id == parentUser);
List<KeyValueModel> assignedUsers = _roleAssignmentService.GetAssignedUsers(parent, assignee,parentUsr)
.Select(
x => new KeyValueModel(x.Id, x.DisplayName))
.ToList();
return Json(assignedUsers);
}
和 Jquery 代码:
$(function() {
$('#ParentUser').change(function() {
mappedModel.changedParentUser = true;
mappedModel.ParentUser($(this).val());
$.ajax({
url: '@Url.Action("GetAssignedUsers", "RoleAssignments")',
type: 'POST',
data: ko.toJSON(mappedModel),
contentType: 'application/json; charset=utf-8',
success: function(data) {
mappedModel.AssignedUsers(data);
}
});
});
});
此代码在我本地运行时有效,没有问题,只有在我尝试在生产环境中运行时才会出现错误。请帮忙。
编辑:
尝试以下使我的 AJAX 动作只有一个参数的解决方案不起作用:
这是我传递的模型:
public class AssignModel : ActionModel
{
public bool CanAssignAll { get; set; }
public KeyValueModel ParentRole { get; set; }
public Guid? ParentUser { get; set; }
public KeyValueModel AssigneeRole { get; set; }
public List<KeyValueModel> AssignedUsers { get; set; }
public List<KeyValueModel> ParentUsers { get; set; }
public List<KeyValueModel> AssigneeUsers { get; set; }
}
public class ActionModel
{
public bool ActionSuccess { get; set; }
public string ActionMessage { get; set; }
public bool CanEdit { get; set; }
public bool CanCreate { get; set; }
}
public class KeyValueModel
{
public Guid Id { get; set; }
public string DisplayName { get; set; }
}
这些是正在使用的模型。堆栈跟踪确实看起来像反序列化的问题,但使用尝试更新 JsonValueFactoryProvider 如下所述也不起作用。
再次编辑:我的模型肯定有问题,但我不知道是什么。我将我的ajax方法更改为原来的3个参数,然后在jquery中,只发布了我需要的数据而不是整个模型,它起作用了,错误就消失了。但是,当我保存对象时(也使用 AJAX 方法并将完整模型作为参数传递),发生了同样的错误。但是我的模型并没有什么疯狂的,所以我不明白。我什至尝试更改Guid?只是一个指导,看看是否可以解决它,但没有。