Angular 5 HttpClient Post List для Web Api - всегда ноль? - PullRequest
0 голосов
/ 26 апреля 2018

Установка Angular 5 и .net core Web Api. На контроллере привязка модели всегда приводит к нулю при попытке привязки к сложному объекту.

Код указан ниже.

Этот пример адаптирован из другого SO ответа . но это не работает для меня.

Контроллер:

[Route("demopost1")]
[HttpPost]
public async Task < IntResultEntity > DemoPostList1([FromBody]DemoPostViewModel payload)
{
    return await Task.FromResult(new IntResultEntity { Result = 0 });
}

Модели:

public class DemoPostModel {
    public string RelationType { get; set; }
    public int Weight { get; set; }
}

public class DemoPostViewModel {
    public IList<DemoPostModel> SubUnits { get; set; }
}

Клиентская сторона:

    export class DemoPostComponent implements OnInit {
    constructor(private demoPostSvc: DemoPostService,
        private fb: FormBuilder) { }

    demoData: any[]
    demoPostForm: FormGroup

    submitDemoPost1(form: FormGroup) {
        let formModel = form.value;
        const payload = {
            'subUnits': [
                formModel.demoFormArray.map(element => ({
                    'relationType': element.relationType,
                    'weight': element.weight
                }))
            ]
        };

        this.demoPostSvc.demoPost1(payload)
            .subscribe(data => {
                console.log("Post success.");
            }, error => {
                console.log("Post failed.");
            });

    }

    ngOnInit() {
        this.demoData = [
            { 'relationType': 1, 'weight': 2 },
            { 'relationType': 3, 'weight': 4 },
        ];
        this.demoPostForm = this.fb.group({
            demoFormArray: this.populateForm()
        });
    }

    populateForm(): FormArray {
        let formFields: any[] = [];

        this.demoData.forEach(element => {
            formFields.push(this.fb.group({
                'relationType': element.relationType,
                'weight': element.weight
            }));
        });

        return this.fb.array(formFields);
    }

}

1 Ответ

0 голосов
/ 27 апреля 2018

Измените DemoPostViewModel, добавив конструктор, как показано ниже:

public class DemoPostViewModel
{
    public DemoPostViewModel()
    {
        SubUnits = new List<DemoPostModel>();
    }
    public IList<DemoPostModel> SubUnits { get; set; }
}
...