Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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 如何将深层JSON对象发送到操作?_Asp.net Mvc_Json - Fatal编程技术网

Asp.net mvc 如何将深层JSON对象发送到操作?

Asp.net mvc 如何将深层JSON对象发送到操作?,asp.net-mvc,json,Asp.net Mvc,Json,在我的web应用程序中,我有一个动态生成的表单,我用它创建一个JSON对象,以回溯到一个动作。如图所示: function getConfigItemWithValidators() { log.info("getConfigItemWithValidators()"); var oConfigItem = { "Name": $("#txtName").html(), "InputFileCellInde

在我的web应用程序中,我有一个动态生成的表单,我用它创建一个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);
    }
以下是配置项目的代码:

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);
    }
}
公共类ConfigItem
{
公共字符串名称{get;set;}
公共int InputFileCellIndex{get;set;}
私有IList_validators=新列表();
公共IList验证器
{
得到
{
返回验证程序;
}
}
公共无效添加验证程序(验证程序验证程序)
{
aValidator.ConfigItem=此;
_添加(aValidator);
}
}

我需要做些什么来获取ConfigItem.Validators,以便为我的JSON请求生成?

它是空的,因为默认绑定器对数组不起作用。您将需要实现custombinder。
您可以看到CustomBinder的一个示例,它是空的,因为默认的binder不能很好地用于数组。您将需要实现custombinder。
您可以看到一个自定义活页夹的示例

而不是编写自定义活页夹,我让我的表单适应内置的活页夹。当然,这总是一个选择,但属性的名称可以更改,然后您必须在视图中甚至HTML切片中进行类似的更改。我认为这会增加不必要的工作量。与其编写自定义活页夹,我让我的表单适应内置的活页夹。当然,这总是一个选择,但属性的名称可以更改,然后您必须在视图中进行类似的更改,甚至在HTML切片中进行更改。我认为这会增加不必要的工作量。