2012-11-15 141 views
1

我們的Web應用程序中有一個Razor表單。在與客戶的會議,我們瞭解到,在這種形式中的一個字段應該接受的輸入是:MVC中的逗號分隔和分隔符文本字段4

  • 逗號分隔的數字
  • 包括數字範圍的列表表達使用破折號

例如,最終用戶可能會輸入45,50-53,65來表示數字45,50,51,52,53,65的列表。我假定文本框可能包含任意空白以及應該忽略的字符(因此45, 50-53, 65將代表相同的信息)。

如何在MVC 4中使用Razor設置這樣的文本框?特別是,

  1. 如何在我的剃刀視圖中創建文本框?
  2. 我將如何在我的模型中的文本框中表示信息?
  3. 我將如何將文本框數據綁定到模型?
  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,你可以使用這個表達式:

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