[英]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.