C# ASP.Net Core 3 MVC中的多个绑定(前缀=“…”)
我有一个ASP.NETMVC4应用程序,正在移植到ASP.NETCore3.0MVC 我正在尝试移植这个方法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")]
[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"
}]
}