簡體   English   中英

如何將數組從 Javascript 傳遞給控制器​​的動作?

[英]How to pass array from Javascript to controller's action?

我在.cshtml視圖的@section Scripts中有這樣的 JS 函數:

function SendIndexes() {
                    var selectedSortOption = $("#SortBy").find('option:selected');
                    var sortIndex = selectedSortOption.val();

                    var selectedFilterByTypeOption = $("#filter_marker_bytype").find('option:selected');
                    var filterByTypeIndex = selectedFilterByTypeOption.val();

                    var selectedFilterByScoreOption = $("#filter_marker_byscore").find('option:selected');
                    var filterByScoreIndex = selectedFilterByScoreOption.val();
                    

                    var selectedFilterByStatusOption = $("#filter_marker_bystatus").find('option:selected');
                    var filterByStatusIndex = selectedFilterByStatusOption.val();

                    var markerFilterIndexes = [filterByTypeIndex, filterByScoreIndex, filterByStatusIndex];


                    location.href = `/Markers/MarkersList?page=@Model.PagingInfo.CurrentPage&sortIndex=${sortIndex}&markerFilterIndexes=${markerFilterIndexes}`
                }

和控制器動作簽名是這樣的:

public async Task<IActionResult> MarkersList(List<string> markersForUpdateIds, IEnumerable<int> markerFilterIndexes, int page = 1, string message = "", int sortIndex = 0)
{
...
}

問題是根本沒有傳遞三個元素的數組。 但是,如果我只將一個變量(元素)推送到這個數組,那么它會按原樣傳遞給控制器​​的操作。

為什么會發生這種情況以及如何將所有三個元素都傳遞給控制器​​?

我建議您在參數中使用[FromQuery]屬性,並像這樣設置 URL 的格式: myparam=myvalue1&myparam=value2&myparam=myvalue3

public async Task<IActionResult> MarkersList([FromQuery]List<string> markersForUpdateIds, [FromQuery]IEnumerable<int> markerFilterIndexes, [FromQuery]int page = 1,[FromQuery] [FromQuery]string message = "", [FromQuery]int sortIndex = 0)
{
...
}

看看模型綁定: https ://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding ? view = aspnetcore-3.1#sources

用於將數組傳遞給控制器​​操作。 使用下標數字 (... [0] ... [1] ...) 的數據格式必須確保它們從零開始按順序編號。 在這里你不需要定義一個數組,只需像這樣格式化你的 url:

location.href = `/Markers/MarkersList?page=@Model.PagingInfo.CurrentPage&sortIndex=${sortIndex}&markerFilterIndexes[0]=${filterByTypeIndex}&markerFilterIndexes[1]=${filterByScoreIndex}&markerFilterIndexes[2]=${filterByStatusIndex}`

由於數組中的數據只是int類型的數據,所以可以省略下標數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM