首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何接受数组作为ASP.NET MVC控制器操作参数?

如何接受数组作为ASP.NET MVC控制器操作参数?
EN

Stack Overflow用户
提问于 2012-03-01 07:22:29
回答 4查看 66.7K关注 0票数 86

我有一个名为Designs的ASP.net MVC控制器,它有一个带有以下签名的操作:

public ActionResult Multiple(int[] ids)

但是,当我尝试使用url导航到此操作时:

http://localhost:54119/Designs/Multiple?ids=24041,24117

ids参数始终为null。有没有办法让MVC将?ids= URL查询参数转换为操作的数组?我见过使用操作过滤器的讨论,但据我所知,这只适用于在请求数据中传递数组的POST,而不是URL本身。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-01 07:26:28

默认模型绑定器需要这个url:

http://localhost:54119/Designs/Multiple?ids=24041&ids=24117

为了成功绑定到:

public ActionResult Multiple(int[] ids)
{
    ...
}

如果你想使用逗号分隔值,你可以编写一个自定义的模型绑定器:

public class IntArrayModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        if (value == null || string.IsNullOrEmpty(value.AttemptedValue))
        {
            return null;
        }

        return value
            .AttemptedValue
            .Split(',')
            .Select(int.Parse)
            .ToArray();
    }
}

然后,您可以将此模型绑定器应用于特定的操作参数:

public ActionResult Multiple([ModelBinder(typeof(IntArrayModelBinder))] int[] ids)
{
    ...
}

或者将其全局应用于Global.asaxApplication_Start中的所有整数数组参数

ModelBinders.Binders.Add(typeof(int[]), new IntArrayModelBinder());

现在,您的控制器操作可能如下所示:

public ActionResult Multiple(int[] ids)
{
    ...
}
票数 153
EN

Stack Overflow用户

发布于 2016-05-03 22:12:44

要在Darin Dimitrov's answer上进行扩展,您可以在URL参数中接受一个简单的string,然后自己将其转换为数组:

public ActionResult Multiple(string ids){
  int[] idsArray = ids.Split(',').Select(int.Parse).ToArray();
  /* ...process results... */
}

如果在执行此操作时出现解析错误(因为有人向您传递了格式错误的数组),则可以使异常处理程序返回一个400 Bad Request错误,而不是在找不到端点时MVC返回的默认的、更不友好的404 Not Found错误。

票数 15
EN

Stack Overflow用户

发布于 2012-11-28 23:34:15

您也可以使用这种URL格式,ASP.NET MVC将为您做所有的事情。但是,记住要应用URL编码。

?param1[0]=3344&param1[1]=2222
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9508265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档