2009-08-18 10 views
1

私のWebアプリケーションでは、動的に生成されたフォームを使用して、JSONオブジェクトを作成してアクションに戻すようにしています。ここに見られるように:私のアクションで深いJSONオブジェクトをアクションに送信するにはどうすればよいですか?

function getConfigItemWithValidators() { 
     log.info("getConfigItemWithValidators()"); 
     var oConfigItem = { 
      "Name": $("#txtName").html(), 
      "InputFileCellIndex": $("#inpFieldIndex").val(), 
      "Validators": new Array() }; 

     for (var i = 0; true; i++) { 
      var oHiddenValidatorName = $("[name=hidVld"+i+"]"); 
      var oHiddenValidatorVal = $("[name=txtVld"+i+"]"); 
      if ($("[name=hidVld" + i + "]").length > 0) { 
       var oValidator = { 
        "ValidationType": oHiddenValidatorName.val(), 
        "ValidationValue": oHiddenValidatorVal.val() }; 
       oConfigItem.Validators.push(oValidator); 
      } 
      else 
       break; 
     } 
     return oConfigItem 
    } 

    function saveConfigItemChanges() { 
     log.info("saveConfigItemChanges()"); 
     var oConfigItem = getConfigItemWithValidators(); 
     $("#divRulesContainer").hide("normal"); 
     $.getJSON("PutValidationRules", oConfigItem, 
        saveConfigItemChangesCallback); 
    } 

を、デバッグは、私はmodel.Validatorsが空であることがわかりながら:ここ

[AcceptVerbs(HttpVerbs.Get)] 
    public JsonResult PutValidationRules(ConfigItem model) 
    { 
     // model.Validators is empty 
     return Json(true); 
    } 

はConfigItemのコードです:

public class ConfigItem 
{ 
    public string Name { get; set; } 
    public int InputFileCellIndex { get; set; } 

    private IList<Validator> _validators = new List<Validator>(); 
    public IList<Validator> Validators 
    { 
     get 
     { 
      return _validators; 
     } 
    } 

    public void AddValidator(Validator aValidator) 
    { 
     aValidator.ConfigItem = this; 
     _validators.Add(aValidator); 
    } 
} 

があります私のJSONリクエスト用にConfigItem.Validatorsを構築するために必要なことは何ですか?

答えて

1

デフォルトのバインダーが配列に対してうまく機能しないため、空です。カスタムバインダを実装する必要があります。 hereカスタムバインダーの例

+0

カスタムバインダーを書き込む代わりに、自分のフォームに組み込みバインダーを対応させました。 – JMP

+0

もちろん、それは常に選択肢ですが、属性の名前を変更することができます。その後、HTMLスライシングでも同様の変更を行う必要があります。 –

関連する問題