2012-03-17 7 views
0

MVC私は、次のオブジェクトのJSの配列を持っている:配列は、私のMVCコントローラに掲載されている場合、配列が空の場合jqueryのポスト・アレイ - 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); 
    }; 
} 

それが正常に動作します。配列にオブジェクトがある場合、そのオブジェクトはクラッシュします。

jsonオブジェクトに関数が含まれているため、問題はありますか?

乾杯、

ジェームズ

+2

jqueryポストのコードはどこですか?クライアントまたはサーバー側で「クラッシュしますか?例外メッセージ、スタックトレース? – nemesv

+0

こんにちは、クライアント側でクラッシュし、クロムのクラッシュ画面以外のエラーは発生しません。 – Zack

+0

@James、はい。それはオブジェクトを直列化しようとします。それはすべてのプロパティを意味しますが、オブジェクトの 'CreateElement'プロパティを直列化しようとすると失敗します。http://www.json.org/を見てください許可された.. –

答えて

1

機能は、シリアル化された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) { 

    } 
}); 
すでにJSONのシリアライズのための良い候補を探します SkillModelコンストラクタにいくつかの skillModelAdapterオブジェクトを渡していることのようにあなたのコードから、それが見えます

、サーバー側にはビューモデルがあります。

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) 
{ 
    ... 
} 
関連する問題