1

我的 C# MVC4 应用程序中有一个表单集合。在index[0]这个集合中,有一个字符串总是被格式化为"10=on&13=on&15=on"; 唯一的区别是#=on字符串中的数量。

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

4

3 回答 3

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

需要正则表达式吗?

不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不。

于 2013-04-14T20:33:18.467 回答
2
var nums = Regex.Matches(input, @"\d+").Cast<Match>().Select(m => m.Value)
          .ToList();
于 2013-04-14T20:29:30.960 回答
0

有问题的字符串看起来像一个查询字符串,因此一种方法是使用从字符串System.Web.HttpUtility.ParseQueryString()中获取 a 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
    }
}
于 2013-04-14T20:32:34.310 回答