Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.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
C# Angular 8将formData发布到ASP.NET核心API无法绑定IEnumerable/List_C#_Angular_Typescript_Asp.net Core_Angular8 - Fatal编程技术网

C# Angular 8将formData发布到ASP.NET核心API无法绑定IEnumerable/List

C# Angular 8将formData发布到ASP.NET核心API无法绑定IEnumerable/List,c#,angular,typescript,asp.net-core,angular8,C#,Angular,Typescript,Asp.net Core,Angular8,正如标题所说 类型脚本模型 export interface RigheOrdiniBuoniSpesaData { id: number; id_ordine: number; id_taglio_buono_spesa: number; quantita: number; } 这是另一个更大物体的一部分: export class OrdiniBuoniSpesaData { id: number; // OTHER FIELD // OTHER FIELD

正如标题所说

类型脚本模型

export interface RigheOrdiniBuoniSpesaData {
  id: number;
  id_ordine: number;
  id_taglio_buono_spesa: number;
  quantita: number;
}
这是另一个更大物体的一部分:

export class OrdiniBuoniSpesaData {
  id: number;
  // OTHER FIELD
  // OTHER FIELD
  // OTHER FIELD
  righe_ordine: RigheOrdiniBuoniSpesaTableData;
}
保存方法

saveOrder(model: OrdiniBuoniSpesaData) {
    const headerPost: HttpHeaders = new HttpHeaders();
    headerPost.set('Content-type', 'application/x-www-form-urlencoded');
    const formData: FormData = new FormData();
    formData.append('id_cliente', model.id_cliente.toString());
    // VARIOUS FORM FIELDS
    //THIS IS ARRAY DATA
    formData.append('righe_ordine', JSON.stringify(model.righe_ordine));
    return this.http
        .post<boolean>(
          requestURL,
          formData,
          { headers: headerPost }
        )
        .pipe(
          catchError(this.handleError)
        );
}
在API方面

JSON的接收模型

public class RigheOrdiniBuoniSpesaViewModel
{
    public long id { get; set; }
    public long id_ordine { get; set; }
    public long id_taglio_buono_spesa { get; set; }
    public int quantita { get; set; }
}
哪个在

public class OrdiniBuoniSpesaViewModel 
    {
        public long id { get; set; }
        //OTHER VARIOUS FIELDS
        //I TRIED ALSO WITH LIST INSTEAD OF IENUMERABLE
        public IEnumerable<RigheOrdiniBuoniSpesaViewModel> righe_ordine {get;set;}
    }
存在并正确填充了。。。。。但由于某种原因,将其绑定到OrdinibounispesaviewModel失败了

我做错了什么?有什么想法吗

编辑:

目前,我找到的唯一解决方案是在进入控制器后直接捕获值:

string righeJson = this.Request.Form["righe_ordine"].ToString();
if(!string.IsNullOrEmpty(righeJson))
      model.righe_ordine = JsonConvert.DeserializeObject<IEnumerable<RigheOrdiniBuoniSpesaViewModel>>(righeJson);
string righeJson=this.Request.Form[“righe_ordine”].ToString();
如果(!string.IsNullOrEmpty(righeJson))
model.righe_ordine=JsonConvert.DeserializeObject(righeJson);

我认为您需要像这样更改型号名称

private readonly IJsonParseService<RigheOrdiniBuoniSpesaViewModel> _jsonParsePostOptionDefaultVm;

jsonParsePostOptionDefaultVm.ToObject(viewModel.RigheOrdiniBuoniSpesaViewModel); 
在js代码中

formData.append('righeOrdine', JSON.stringify(model.righe_ordine));
和c#

公共类OrdinibounispesaviewModel
{
公共长id{get;set;}
//其他各领域
//我还尝试使用LIST而不是IENUMERABLE
公共IEnumerable RigheOrdine{get;set;}
}
更新:只是为了增强

在控制器中使用它之前,可能需要对其进行解析

你可以阅读我的全部代码

我们需要创建接口和类来实现它

public interface IJsonParseService<T> where T : class
{
     T ToObject(string json);
}

public class JsonParseService<T> : IJsonParseService<T> where T : class
{
    public T ToObject(string json)
    {
      return JObject.Parse(json).Root.ToObject<T>();
    }
}
公共接口IJsonParseService,其中T:class
{
T ToObject(字符串json);
}
公共类JsonParseService:IJsonParseService其中T:class
{
公共T对象(字符串json)
{
返回JObject.Parse(json.Root.ToObject();
}
}
然后注册

services.AddScoped(typeof(IJsonParseService<>), typeof(JsonParseService<>));
services.AddScoped(typeof(IJsonParseService)、typeof(JsonParseService));
所以你的代码应该是这样的

private readonly IJsonParseService<RigheOrdiniBuoniSpesaViewModel> _jsonParsePostOptionDefaultVm;

jsonParsePostOptionDefaultVm.ToObject(viewModel.RigheOrdiniBuoniSpesaViewModel); 
private只读IJsonParseService\u jsonParsePostOptionDefaultVm;
jsonParsePostOptionDefaultVm.ToObject(viewModel.RigheOrdiniBuoniSpesaViewModel);

我认为您需要像这样更改型号名称

private readonly IJsonParseService<RigheOrdiniBuoniSpesaViewModel> _jsonParsePostOptionDefaultVm;

jsonParsePostOptionDefaultVm.ToObject(viewModel.RigheOrdiniBuoniSpesaViewModel); 
在js代码中

formData.append('righeOrdine', JSON.stringify(model.righe_ordine));
和c#

公共类OrdinibounispesaviewModel
{
公共长id{get;set;}
//其他各领域
//我还尝试使用LIST而不是IENUMERABLE
公共IEnumerable RigheOrdine{get;set;}
}
更新:只是为了增强

在控制器中使用它之前,可能需要对其进行解析

你可以阅读我的全部代码

我们需要创建接口和类来实现它

public interface IJsonParseService<T> where T : class
{
     T ToObject(string json);
}

public class JsonParseService<T> : IJsonParseService<T> where T : class
{
    public T ToObject(string json)
    {
      return JObject.Parse(json).Root.ToObject<T>();
    }
}
公共接口IJsonParseService,其中T:class
{
T ToObject(字符串json);
}
公共类JsonParseService:IJsonParseService其中T:class
{
公共T对象(字符串json)
{
返回JObject.Parse(json.Root.ToObject();
}
}
然后注册

services.AddScoped(typeof(IJsonParseService<>), typeof(JsonParseService<>));
services.AddScoped(typeof(IJsonParseService)、typeof(JsonParseService));
所以你的代码应该是这样的

private readonly IJsonParseService<RigheOrdiniBuoniSpesaViewModel> _jsonParsePostOptionDefaultVm;

jsonParsePostOptionDefaultVm.ToObject(viewModel.RigheOrdiniBuoniSpesaViewModel); 
private只读IJsonParseService\u jsonParsePostOptionDefaultVm;
jsonParsePostOptionDefaultVm.ToObject(viewModel.RigheOrdiniBuoniSpesaViewModel);

在其他项目中,我正确解析了IEnumerables,如果必须这样做,那么我当前的解决方法就足够了。谢谢尼哥,你确定吗?仅供参考,我的模型中的其他字段有:public long id_cliente{get;set;}public long id_modalita_pagamento{get;set;}等等,到目前为止,它们对下划线的命名约定没有问题。我尝试了新的解决方案,但没有改变,仍然没有结果,在我正确解析IEnumerables的其他项目中,如果我必须这样做,那么我当前的工作环境就足够了。谢谢尼哥,你确定吗?仅供参考,我的模型中的其他字段有:public long id_cliente{get;set;}public long id_modalita_pagamento{get;set;}等等,到目前为止,它们对下划线的命名约定没有问题。我尝试了新的解决方案,但没有任何更改,仍然没有结果,我必须手动执行