【问题标题】:Comma-delimited and dash-delimited text fields in MVC 4MVC 4 中逗号分隔和破折号分隔的文本字段
【发布时间】:2012-11-16 09:19:21
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:
    1. 我只想创建一个普通的文本框——你要的是一串数字
    2. 您可以将表单值作为字符串,然后将另一个属性作为字符串的解析版本,int[]。
    3. 既然是字符串,就可以作为字符串贴出来。
    4. 对验证器使用正则表达式。

    对于 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)?(, ?)?)*$
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      相关资源
      最近更新 更多