gpt4 book ai didi

c# - Controller 中的自定义可枚举类型作为参数(ASP.NET MVC)

转载 作者:行者123 更新时间:2023-12-02 22:34:15 25 4
gpt4 key购买 nike

我从事的 ASP.NET MVC 项目需要能够以可扩展的方式过滤数据。我决定使用一个类来表示单个过滤条件(我知道此时它可能是 Dictionary,但我可能需要稍后添加其他属性):

public class FilterCriterion
{
public string FilterName { get; set; }

public string FilterValue { get; set; }
}

这是我想到的将返回过滤数据的 Controller 方法签名:

public JsonResult GetMultipleShowDetailsByFilter(IEnumerable<FilterCriterion> filters, int pageNumber, int itemsPerPage)

此方法将从网页调用(使用 JavaScript),并将返回一个包含一组实体的 JSON,然后这些实体将显示在页面上。

我假设我需要某种转换器来接受原始状态的参数并创建和实现 IEnumerable<FilterCriterion> 的可枚举对象。 .也许我可以使用 ModelBinder , 但我不太确定如何。

你能把我推向正确的方向吗?谢谢。

编辑:我没有按照建议传递数组。 当我进入 Controller 时,里面的项目数量是正确的 filters ,但它们的属性(FilterName 和 FilterValue)均为 null。下面我贴出完整的代码以及客户端过滤对象的内容。我究竟做错了什么?Javscript 代码:

function filterChanged() {
var activeFilters = $(':checked');
var filters = new Array();
$.each(activeFilters, function (i, val) {
var newItem = new Object();
newItem.FilterName = $(val).attr('data-filter-type');
newItem.FilterValue = $(val).attr('data-filter-value');
filters[i] = newItem;
});

$.getJSON('../DatabaseApi/GetMultipleShowDetailsByFilter',
{
'filters': filters,
'pageNumber': 1,
'itemsPerPage': 10
},
function(data) {
fill(data);
});
}

创建的对象看起来如何(证明有数据,取自VS Immediate Window):

?filters
[[object Object],[object Object]]
[0]: {...}
[1]: {...}
[prototype]: []
?filters[0]
{...}
[prototype]: {...}
FilterName: "Genre"
FilterValue: "Animation"

最佳答案

  1. 将您的 Controller 签名更改为

    public JsonResult GetMultipleShowDetailsByFilter(FilterCriterion[] filters, int pageNumber, int itemsPerPage)
  2. 使用以下 POST 结构:

    filters[0].FilterName = 'aaa'
    filters[0].FilterValue = 'bbbb'
    filters[1].FilterName = 'ccc'
    filters[1].FilterValue = 'ddd'
    ...
    filters[n].FilterName = 'xxx'
    filters[n].FilterValue = 'yyy'

    (您可以使用 jQuery 轻松做到这一点)

一个警告:您的索引编号应该是连续的,即没有间隙。

主题启动器的更新:您必须非常小心POST结构。嵌套的 JavaScript 对象不行。尝试使用这个:

function filterChanged() {
var activeFilters = $(':checked');
var data = {
'pageNumber': 1,
'itemsPerPage': 10
}
$.each(activeFilters, function (i, val) {
data['filters[' + i + '].FilterName'] = $(val).attr('data-filter-type');
data['filters[' + i + '].FilterValue'] = $(val).attr('data-filter-value');
});

$.getJSON('../DatabaseApi/GetMultipleShowDetailsByFilter',
data,
function(data) {
fill(data);
});
}

关于c# - Controller 中的自定义可枚举类型作为参数(ASP.NET MVC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11704125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com