如何在 asp.net 核心中从返回零计数的主体正确映射数组
Posted
技术标签:
【中文标题】如何在 asp.net 核心中从返回零计数的主体正确映射数组【英文标题】:How to properly map array from body returning zero count in asp.net core 【发布时间】:2020-12-23 06:03:52 【问题描述】:我在 razor 页面中有一个 jquery,用于收集检查的 id 并将它们传递给 asp.net 核心应用程序中的控制器。
jquery 工作正常,但控制器中的计数总是为零。
我在这里尝试了一些示例。我也使用 [frombody] 这甚至击中了控制器
$('#Delete').click(function ()
var fav = [];
$.each($("input[name='ID']:checked"), function ()
fav.push($(this).val());
);
$.ajax(
type: "post",
url: "/Loan/Delete",
dataType: "json",
data: JSON.stringify(fav),
success: function (result)
)
);
控制器 在控制器中,id 计数为零
public void DeleteStatementsRoles(ICollection<Products> ids)
我想我做错了什么
【问题讨论】:
只发送json时需要设置合适的contentType 我添加了 ``` contentType: "application/json; charset=utf-8",``` 也没有用 哦...您的数据中有favorite
,但数组名为fav
。确保检查浏览器开发工具控制台中的错误,这会在那里抛出一个
我已经更正了,现在我可以在控制台Array(2) 0: "1" 1: "2"
中获取数组,但仍然无法访问控制器
您能分享一下您的产品型号吗?您是如何设计您的favorite
变量的。
【参考方案1】:
这是一个工作演示:
型号:
public class Products
public int Id get; set;
查看:
<form>
<input name="ID" type="checkbox" value="1"/>
<input name="ID" type="checkbox" value="2"/>
<input type="button" id="Delete" value="delete" />
</form>
@section Scripts
<script>
$('#Delete').click(function ()
var fav = [];
$.each($("input[name='ID']:checked"), function ()
var obj = ; //change here...
obj.Id = $(this).val()
fav.push(obj);
);
$.ajax(
type: "post",
url: "/Home/Delete",
contentType: "application/json", //add this..
dataType: "json",
data: JSON.stringify(fav),
success: function (result)
)
);
</script>
控制器:
public class HomeController : Controller
[HttpPost]
public void Delete([FromBody] ICollection<Products> ids)
//do your stuff...
结果:
另一种情况:因为我不确定你的模型是什么,这里还有一个工作演示,其中模型包含一个列表。
型号:
public class Products
public List<int> Id get; set;
查看:
<form>
<input name="ID" type="checkbox" value="1"/>
<input name="ID" type="checkbox" value="2"/>
<input type="button" id="Delete" value="delete" />
</form>
@section Scripts
<script>
$('#Delete').click(function ()
var fav = [];
$.each($("input[name='ID']:checked"), function ()
fav.push($(this).val());
);
var favarite = []; //add...
favarite.push( id: fav );
$.ajax(
type: "post",
url: "/Home/Delete",
contentType: "application/json", //add this...
dataType: "json",
data: JSON.stringify(favarite),
success: function (result)
)
);
</script>
结果:
【讨论】:
我的模型和第一个例子一样。一旦我输入[FromBody]
,它就不会击中控制器。如果我删除 [FromBody]
然后点击控制器将归零
确保您已将contentType: "application/json"
添加到您的ajax。
我建议您可以使用 jQuery 共享您的模型和整个剃须刀视图。这将帮助您更快地解决问题。
剃须刀很大,另一件事是我试过IFormCollection
,我得到了``` "[\"Id\":\"1\",\"Id\": \"2\"]" ```也许我最终还是要分享它
我认为您需要将我的整个代码复制到您的项目中。也许您错过了项目中的某些内容。确保在您的 ajax 中添加 contentType: "application/json"
并在您的操作中添加 [FromBody]
。以上是关于如何在 asp.net 核心中从返回零计数的主体正确映射数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在 asp.net core v 2.0 中从 javascript 调用 PageModel 方法
在 prometheus/grafana 中从零开始绘制一个计数器
如何将我的请求中的安全主体传递到 asp.net MVC 中的线程中
如何在 asp.net 中从 javascript 调用代码隐藏函数?