c#表单集合值到Int列表

时间:2013-04-14 20:24:13

标签: c# regex asp.net-mvc-4 formatting formcollection

我在C#MVC4应用程序中有一个Form Collection。在此集合的index[0]中,有一个字符串,其格式始终为"10=on&13=on&15=on";唯一的区别是字符串中#=on的数量。

我想从此字符串中提取每个数字并将它们添加到整数列表中。这样做最简单的方法是什么?是否需要Regex?

3 个答案:

答案 0 :(得分:3)

  

这样做最简单的方法是什么?

我会使用自定义模型绑定器:

public class MyModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var request = controllerContext.RequestContext.HttpContext.Request.Params;
        var keys =
            from key in request.Keys.Cast<string>()
            where request[key] == "on"
            select key;
        var onValues = new List<int>();
        foreach (var key in keys)
        {
            int value;
            if (int.TryParse(key, out value))
            {
                onValues.Add(value);
            }
        }

        return onValues.ToArray();
    }
}

然后像这样的控制器动作:

public ActionResult SomeAction([ModelBinder(typeof(MyModelBinder))]int[] values)
{
    return View();
}

现在您只需将以下请求发送到此控制器操作,自定义模型绑定器即可完成此任务:

/SomeAction?10=on&13=on&15=on
  

是否需要Regex?

Nooooooooooooooooooooo。

答案 1 :(得分:2)

var nums = Regex.Matches(input, @"\d+").Cast<Match>().Select(m => m.Value)
          .ToList();

答案 2 :(得分:0)

有问题的字符串看起来像一个查询字符串,因此一种方法是使用System.Web.HttpUtility.ParseQueryString()从字符串中获取NameValueCollection。然后枚举键并解析它们以获得整数。

var collection = System.Web.HttpUtility.ParseQueryString("10=on&13=on&15=on");

foreach (var key in collection.Keys.Cast<string>())
{
    int i;
    if (int.TryParse(key, out i))
    {
        // add i to list of ints
    }
}