0

我一直在尝试传递由以下函数创建的 int 数组:

function getCurrentSwimmerList() {
    var swimmerList = [];
    $("#swimmerTable >  tbody > tr").each(function () {
        swimmerList.push( parseInt($(this).data('swimmerid')) );
    });
    return swimmerList;
}

我在令牌输入中使用它来消除搜索框中的某些建议,所以我设置了令牌输入,如下所示:

$("#swimmerTokenInput").tokenInput("Admin/retrieveTokensForQuery", {
            urlParams: { "IDsAlreadyAdded": getCurrentSwimmerList },

我修改了令牌输入文件,以允许您通过设置在请求中传递其他参数,urlParams我对代码所做的添加是(在相应的部分中):

//add params passed in as urlParams
if (settings.urlParams != null) {
    for (var key in settings.urlParams) {
        if (settings.urlParams.hasOwnProperty(key)) {
            ajax_params.data[key] = settings.urlParams[key];
        }
    }
}

我进行了测试,并成功地在查询字符串中获得了这些值(在Ol搜索框中输入的位置):

IDsAlreadyAdded=5%2C6&q=Ol

哪个 chrome 可以正确识别和解析:

IDsAlreadyAdded:5,6
q:Ol

我正在调用的方法的签名如下:

public JsonResult retrieveTokensForQuery(string q, int[] IDsAlreadyAdded)

每次q成功获取适当的值,但IDsAlreadyAdded 总是获取一个空值。我查看了关于 SO(尝试traditional=true,或IdsAlreadyAdded[] = ...,拥有List<int>IEnumerable<int>)的各种答案以尝试解决问题,但我无法让它工作。

任何帮助将不胜感激。

4

1 回答 1

1

您始终可以创建一个自定义模型绑定器,将字符串值映射到 int[],如下所示:

public class IntArrayModelBinder : System.Web.Mvc.DefaultModelBinder
{
    public override object BindModel(System.Web.Mvc.ControllerContext controllerContext, System.Web.Mvc.ModelBindingContext bindingContext)
    {
        var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        if (!string.IsNullOrEmpty(valueProviderResult.AttemptedValue))
        {
            var items = valueProviderResult.AttemptedValue.Split(',');
            var result = new int[items.Length];
            for (var counter = 0; counter < items.Length; counter++)
            {
                result[counter] = int.Parse(items[counter]);
            }
            return result;
        }
        return base.BindModel(controllerContext, bindingContext);
    }
}

然后在初始化路由时注册活页夹:

ModelBinders.Binders.Add(typeof(int[]), new IntArrayModelBinder());
于 2013-05-17T02:40:55.560 回答