Сериализация правильно Dynami c Форма, сгенерированная из JSON Схема - PullRequest
0 голосов
/ 29 марта 2020

У меня есть JSON схема, где я генерирую Html форму, я думаю, что я что-то очень мало пропускаю, где я не могу сериализовать JSON правильно в нужном мне формате, jsonschema я использую для генерации HTML:

var fieldDefinitions = 
"{
    "inputs": [
        {
            "inputs": [
                {
                    "inputs": [],
                    "type": "TEXT",
                    "description": null,
                    "name": "name",
                    "multiple": false
                },
                {
                    "inputs": [],
                    "type": "TEXT",
                    "description": null,
                    "name": "reason",
                    "multiple": false
                }
            ],
            "type": null,
            "description": null,
            "name": "requestMembershipInput",
            "multiple": false
        }
    ],
    "constraints": [
        {
            "name": "mandatory_requestMembershipInput_name",
            "expression": "requestMembershipInput?.name != null",
            "explanation": "name is mandatory for MemberRequest",
            "inputNames": [
                "requestMembershipInput"
            ]
        }
    ]
} "

Я использую javascript и ajax для генерации и сериализации данных формы для отправки на сервер. От сериализации я ожидаю, что это JSON будет произведено

{
     "requestMemebershipInput" : {
        "name": "test",
        "reason": "111"
     }
}```
 I use javascript to generate the code i store jsonschema on variable fieldDefinitions just to clear the code i use below ``` var options = {
            method: 'get',
            action: '#action',
            buttonLabel: 'Submit'
        }; 
    function wrappLabel(label, field) {
            return '<div class="form-group"><label>' + label + '</label>' + field + '</div>';
        }

        const fieldType = {
             TEXT: function (name, label) { return wrappLabel(label, '<input data-type="text" class="form-control" name="' + name + '" />'); },


        };
        var fieldDefinitions =  @Html.Raw(@ViewBag.name);
        function buildForm(fieldDefinition) {        
            var type = fieldDefinition.type;
           var fullName = name.length > 0 ? name + '[' + fieldDefinition.name + ']' : fieldDefinition.name;
           // var fullName = fieldDefinition.name;
            if (type != null) {
                return fieldType[type](fullName, fieldDefinition.name);
            } else {
                var result = '<fieldset>';
                for (var input in fieldDefinition.inputs) {
                    result += buildForm(fieldDefinition.inputs[input], fullName)                
                }
                return result + '</fieldset>';              
            }
        } 
        for (var input in fieldDefinitions.inputs) {
            var html = buildForm(fieldDefinitions.inputs[input], fieldDefinitions.name);
           console.log(html);
            $('#form1').append(html);          
        }});

, а затем я сериализирую это так

      $(document).ready(function () {
          $("#form1").on('submit', function (e) {
              e.preventDefault();
              var formData =  JSON.stringify($('#form1').serialize());       
              console.log("stringgjhgjgjgjj", formData);
                $.ajax({
                    url: "/Contract/Complex",
                    contentType: "application/json",
                    dataType: "json",
                    type: "POST",
                    data: formData,
                    redirect: 'follow',
                    success: function (data) {
                       // alert(data.message);
                        console.log(data);
                    },
                    error: function (xhr, resp, text) {
                        console.log(xhr, resp, text);
                    }
                });
            });

    });```
the console shows  serialized data in HTML I have two textboxes name and reason and that is ok, two textboxes I need  
``` "name=sdsd&reason=sdsd" ``` but I expect to final result to send correct data in this format ``` 
{
     "requestMemebershipInput" : {
        "name": "test",
        "reason": "111"
     }
}``` 
...