【问题标题】:How do I send deep JSON objects to an Action?如何将深层 JSON 对象发送到 Action?
【发布时间】:2009-08-18 22:54:07
【问题描述】:

在我的网络应用程序中,我有一个动态生成的表单,用于创建一个 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 吗?

【问题讨论】:

    标签: asp.net-mvc json


    【解决方案1】:

    它是空的,因为默认绑定器不适用于数组。您将需要实现一个自定义绑定器。 可以看here custombinders的例子

    【讨论】:

    • 我没有编写自定义活页夹,而是让我的表单适应内置活页夹。
    • 当然,这始终是一种选择,但属性的名称可以更改,然后您必须在视图中甚至在 HTML 切片中进行类似的更改。在我看来,这增加了不必要的工作量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多