如何解决传递大量参数ajax、asp.net
我想通过ajax函数传递一些参数。我能够传递字符串列表或 2 个参数(int 类型)。我在传递列表和 int 参数时遇到问题。最终,可能会有比两个更多的参数。
我的例子:
.cs 文件:
public string AddListElement(int secId,List<string> fieldsList)
{
//code...
return "a";
}
.cshtml 文件:
<script>
function AddElement(idSection) {
var stringArray = new Array();
stringArray[0] = "item1";
stringArray[1] = "item2";
stringArray[2] = "item3";
$.ajax({
type: "POST",url: "/BK/User/AddListElement",data: {
secId: idSection,fieldsList: stringArray,},dataType: "json",Traditional: true,}).fail(function () {
//code...
}).done(function (data) {
//code...
});
}
</script>
//other code...
<div class="form-group main-center2 col-8 mt-2">
<a class="btn btn-success btn btn-block" onclick="AddElement(@Model.Section[i].Id);" href="#">
Dodaj
</a>
</div>
在这种情况下,idSec 已通过,但列表为空。通过在 Url 中传递 idSec 和这样的列表,我能够很好地传递它。但在我看来这不是最好的解决方案,特别是如果我想要更多参数,例如2 个列表和 3 个 int 参数。
如何像这样传递多个参数?假设参数不同:int、string、list。 我读过类似的主题,但对我不起作用。
附注。
解决方法
从 body 接收 JSON 内容的最佳方式是根据 JSON 的属性定义一个模型,像你的情况一样,你可以这样定义:
1.1.0
和控制器:
1.2.0
但是如果你不想定义额外的模型,你可以使用一个 public class ReceiveData
{
public int secId { get; set; }
public List <string > fieldsList { get; set; }
}
来保存你想从 POST 接收的所有数据:
public string AddListElement(ReceiveData data)
{
//code...
return "a";
}
每个动作只能从主体绑定一个参数
,控制器方法将单个参数映射到请求正文;您可以使用 nativeQuery = true
(一个参数属性)来指定哪个 (see here):
当参数具有 [FromBody] 时,Web API 使用 Content-Type 标头来选择格式化程序。在此示例中,内容类型为“application/json”,请求正文为原始 JSON 字符串(不是 JSON 对象)。
最多允许从消息正文中读取一个参数。所以这行不通:
[FromBody]
在您的情况下,创建一个 DTO 来模拟您发送的 JSON 对象:
// Caution: Will not work!
public HttpResponseMessage Post([FromBody] int id,[FromBody] string name) { ... }
旁注:您需要将请求中的 class ListElementDto {
public int SecId { get; set; }
public List<string> FieldsList { get; set; }
}
public string AddListElement([FromBody] ListElementDto model)
{
//code...
return "a";
}
标头设置为 Content-Type
,并且我还建议在您的 {{ 1}}。 Ajax "application/json"
用于告诉 ajax 期望什么作为服务器响应。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。