传了很多参数(ajax,asp.net)

Pass a lot of parameters (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。 我阅读了类似的主题,但对我没有任何帮助。

PS.

从body接收JSON内容的最好方法是根据JSON的属性定义一个模型,像你的情况,你可以这样定义:

public class ReceiveData
{
    public int secId { get; set; }
    public List <string > fieldsList { get; set; }
}

控制器:

public string AddListElement(ReceiveData data)
{
//code...
return "a";
}

但是如果你不想定义额外的模型,你可以使用一个Dictionary<string, object>来保存你想要从POST接收的所有数据:

public string AddListElement(Dictionary<string, object> keyValuePairs)
{
    //code...
    return "a";
}

每个动作只能从主体绑定一个参数

控制器方法将单个参数映射到请求 body;您可以使用 [FromBody] (参数属性)来指定哪一个 (see here):

When a parameter has [FromBody], Web API uses the Content-Type header to select a formatter. In this example, the content type is "application/json" and the request body is a raw JSON string (not a JSON object).

At most one parameter is allowed to read from the message body. So this will not work:

// Caution: Will not work!    
public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... }

在您的情况下,创建一个模拟您发送的 JSON object 的 DTO:

class ListElementDto {
    public int SecId { get; set; }
    public List<string> FieldsList { get; set; }
}

public string AddListElement([FromBody] ListElementDto model)
{
    //code...
    return "a";
}

Side-note: 你会想把你请求中的 Content-Type header 设置为 "application/json",我也在你的 data 上推荐 运行 JSON.stringify。 Ajax dataType 用于告诉 ajax 服务器响应的预期内容。