1

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

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

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

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

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

1 回答 1

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)?(, ?)?)*$
于 2012-11-15T20:51:51.497 回答