【问题标题】:c# Form Collection Values to List of Intc#表单集合值到Int列表
【发布时间】:2013-04-06 21:41:27
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    有问题的字符串看起来像一个查询字符串,因此一种方法是使用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
        }
    }
    

    【讨论】:

      【解决方案2】:

      最简单的方法是什么?

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

      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
      

      需要正则表达式吗?

      Nooooooooooooooooooooooooo。

      【讨论】:

        【解决方案3】:
        var nums = Regex.Matches(input, @"\d+").Cast<Match>().Select(m => m.Value)
                  .ToList();
        

        【讨论】:

        • 谢谢。这正是我所需要的。
        猜你喜欢
        • 1970-01-01
        • 2013-10-06
        • 2012-12-08
        • 2018-03-15
        • 1970-01-01
        • 1970-01-01
        • 2021-07-04
        • 2011-01-19
        • 2018-08-15
        相关资源
        最近更新 更多