MVC 4中以逗号分隔和以虚线划分的文本字段

时间:2012-11-15 20:29:15

标签: asp.net-mvc razor asp.net-mvc-4

我们的网络应用中有一个Razor表单。在与客户会面时,我们了解到此表单中的一个字段应接受以下输入:

  • 以逗号分隔的数字列表
  • 包括用破折号表示的数字范围

例如,最终用户可能会输入45,50-53,65来表示数字列表45,50,51,52,53,65。我假设文本框也可能包含任意空格。被忽略(所以45, 50-53, 65代表相同的信息)。

如何使用Razor在MVC 4中设置这样的文本框?特别是,

  1. 如何在Razor视图中创建文本框?
  2. 我如何在模型的文本框中表示信息?
  3. 我如何将文本框数据绑定到模型?
  4. 如何设置文本框的验证?

1 个答案:

答案 0 :(得分:1)

  1. 我只想创建一个普通的文本框 - 你要的是一串数字
  2. 您可以将表单值作为字符串,然后将另一个属性作为字符串的解析版本int []。
  3. 由于它是一个字符串,因此可以将其作为字符串发布。
  4. 使用正则表达式作为验证器。
  5. 对于2,您可以在模型中执行以下操作:

    public string Numbers { get; set; }
    public int[] ParsedNumbers
    {
        get
        {
            Func<int[], int[]> arrayToRange = (range) =>
            {
                if (range.Length == 1) return range;
                int[] ret = new int[range[1] - range[0] + 1];
                for (int i = 0; i < ret.Length; i++)
                {
                    ret[i] = i + range[0];
                }
                return ret;
            };
    
            return this.Numbers
                        .Replace(" ", "")
                        .Split(',')
                        .SelectMany(n => arrayToRange(n.Split('-')
                            .Select(n2 => int.Parse(n2)).ToArray())).ToArray();
        }
    }
    

    对于4,您可以使用此RegEx:

    ^(\d(\-\d)?(, ?)?)*$