C# ASP.Net Core 3 MVC中的多个绑定(前缀=“…”)

C# ASP.Net Core 3 MVC中的多个绑定(前缀=“…”),c#,asp.net-mvc,asp.net-core,C#,Asp.net Mvc,Asp.net Core,我有一个ASP.NETMVC4应用程序,正在移植到ASP.NETCore3.0MVC 我正在尝试移植这个方法 [HttpPost] public ActionResult DoSave( [Bind(Prefix = "new")]IEnumerable<C_Data> newItems, [Bind(Prefix = "updated")]IEnumerable<C_Data> updatedItems, [Bind(Prefix = "deleted")]

我有一个ASP.NETMVC4应用程序,正在移植到ASP.NETCore3.0MVC

我正在尝试移植这个方法

[HttpPost]
public ActionResult DoSave(
  [Bind(Prefix = "new")]IEnumerable<C_Data> newItems,
  [Bind(Prefix = "updated")]IEnumerable<C_Data> updatedItems,
  [Bind(Prefix = "deleted")]IEnumerable<C_Data> deletedItems))
{
}
这是C_数据类

public class C_Data
{
    [Key]
    public int Id { get; set; }

    public Guid SID { get; set; }

    [Required]
    [MaxLength(40)]
    public string Name { get; set; }
}
但执行此操作时,这三个参数为空

这是我在ModelState中得到的错误

“无法将JSON值转换为C_数据”

任何人都可以告诉我如何移植这种方法吗

多谢各位

PD:此操作在MVC控制器中,而不是在API控制器中。

以下内容应该会有所帮助


看起来您应该能够使用C_数据对象,将其放入数组中,并在AJAX调用中对其进行字符串化,接收IEnumerable。

对于Asp.Net Core,有两种绑定模型的方法,
ModelBinding
JsonInputFormatter
。对于使用json发送请求,它将使用
JsonInputFormatter
Bind
将不起作用

一般来说,我建议您尝试以下选项:

  • 控制器动作

    [HttpPost]
    public ActionResult DoSave([FromBody]ItemModel itemModel)
    {
        return Ok("Worked");     
    }
    
  • 模型

    public class ItemModel
    {
        public IEnumerable<C_Data> NewItems { get; set; }
        public IEnumerable<C_Data> UpdatedItems { get; set; }
        public IEnumerable<C_Data> DeletedItems { get; set; }
    
    }
    

  • 您是否知道
    BindAttribute
    用于表单而不是json?json应该是
    {“newItems”:[{“Id”:3,“SID”:…}],“updateItems”:[…]}
    public class ItemModel
    {
        public IEnumerable<C_Data> NewItems { get; set; }
        public IEnumerable<C_Data> UpdatedItems { get; set; }
        public IEnumerable<C_Data> DeletedItems { get; set; }
    
    }
    
    {
        "newItems":[{
            "Id":3,
            "SID":"00000000-0000-0000-0000-000000000000",
            "Name":"asd"
        }]
    }