2012-03-17 63 views
0

我有以下对象的JS数组:jQuery的岗位阵列导致浏览器挂起 - MVC 3

function SkillModel(skillModelAdapter) { 
    this.SkillId = skillModelAdapter.SkillId; 
    this.SkillName = skillModelAdapter.SkillName; 
    this.Proficiency = skillModelAdapter.Proficiency; 

    this.Element = null; 

    this.ProficiencyString = function() { 
     switch (this.Proficiency) { 
      case 1: 
       return "Beginner"; 
      case 2: 
       return "Novice"; 
      case 3: 
       return "Intermediate"; 
      case 4: 
       return "Advanced"; 
      default: 
       return "Expert"; 
     } 
    }; 

    this.CreateElement = function() { 
     var searchSkill = $('<div>').addClass('searchSkill').attr('skillId', this.SkillId); 
     var skillName = $('<span>').addClass('skillName').html(this.SkillName); 
     var proficiency = $('<span>').attr('proficiency', this.Proficiency).html(' (' + this.ProficiencyString() + ')'); 
     var removeLink = $('<a href="#">').addClass('removeSkill').html('X'); 

     searchSkill.append(skillName); 
     searchSkill.append(proficiency); 
     searchSkill.append(removeLink); 

     this.Element = searchSkill; 

     $('#SkillsContainer').append(searchSkill); 
    }; 
} 

当阵列被贴到我的MVC控制器,它工作正常,如果数组为空。如果数组中有一个对象,它会崩溃。

是否有问题,因为我的json对象包含函数?

干杯,

詹姆斯

+2

jquery post的代码在哪里? “崩溃”客户端还是服务器端?异常消息,堆栈跟踪? – nemesv 2012-03-17 22:31:36

+0

嗨,它崩溃客户端,除了在铬中的崩溃屏幕没有得到任何错误。 – Zack 2012-03-17 22:35:18

+0

@詹姆斯,是的。它试图序列化对象,这意味着所有的属性..但它试图序列化对象的'CreateElement'属性时失败..看看http://www.json.org/看看是什么允许.. – 2012-03-17 22:49:01

回答

1

函数不能JSON序列。你不应该试图序列化这样的对象。从你的代码看起来你已经逝去的一些skillModelAdapter对象的SkillModel构造函数查找JSON序列化一个很好的候选人:

例如:

var skillModelAdapters = [ 
    { SkillId: 1, SkillName: 'skill 1', Proficiency: 1 }, 
    { SkillId: 2, SkillName: 'skill 2', Proficiency: 1 }, 
    { SkillId: 3, SkillName: 'skill 3', Proficiency: 3 }, 
    { SkillId: 4, SkillName: 'skill 4', Proficiency: 2 } 
]; 

然后:

$.ajax({ 
    url: '@Url.Action("SomeAction")', 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify(skillModelAdapters), 
    success: function(result) { 

    } 
}); 

和在服务器端你会有一个查看模型:

public class SkillViewModel 
{ 
    public int SkillId { get; set; } 
    public string SkillName { get; set; } 
    public int Proficiency { get; set; } 
} 

和相应的控制器动作:

[HttpPost] 
public ActionResult SomeAction(IEnumerable<SkillViewModel> skills) 
{ 
    ... 
}