2016-06-24 87 views
-1

我希望電話號碼的字段最多可以輸入10位數字。我已經放置了[stringlength]屬性,但仍然無法獲得所需的結果。感謝那些能夠幫助我的人。電話號碼的限制長度

在附註中,是否可以拆分電話號碼,以便區號和其餘數字通過存儲的proc單獨發送到db?

型號:

public class Pharmacy 
{ 
    [StringLength(10,MinimumLength=10)] 
    public string PhoneNumber 
    { 
     get 
     { 
      return _phoneNumber; 
     } 
     set 
     { 
      Regex regexObj = new Regex(@"[^\d]"); 
      _phoneNumber = regexObj.Replace(value, ""); 
      _phoneNumber = Regex.Replace(_phoneNumber, @"(\d{3})(\d{3})(\d{4})", "($1) $2-$3"); 
     } 
    } 
} 

表單字段:

<label id="lblPhoneNumber">Phone Number</label>      
<input style="margin: 5px; " type=text name="txtPhoneNumber" id="txtPhoneNumber" value="@Model.Pharmacy.PhoneNumber" /> 
+3

你一定要明白,你的註釋,而不是'MaximumLength'使用'MinimumLength'? –

+0

@巴里,我的錯。我擺脫了這一點,並用MaximumLength替換它,但我得到一個紅線,說明「MaximumLength不是有效的命名屬性參數」。 – julianc

回答

1

你爲什麼要使用HTML標籤的輸入,如果你正在使用ASP.NET MVC?你應該真的使用Razor標籤。

@Html.LabelFor(model => model.PhoneNumber, new { id = "lblPhoneNumber" }) 
@Html.TextBoxFor(model => model.PhoneNumber, new { id = "txtPhoneNumber", style="margin: 5px;", name="txtPhoneNumber", @Value = Model.Pharmacy.PhoneNumber }) 
@Html.ValidationFor(model => model.PhoneNumber, "", new { @class = "text-danger" }) 

此外,請確保您有不顯眼的驗證碼NuGet UnobtrusiveJS。數據註釋其他一切看起來都很好。 [StringLength]的未命名參數是最大長度,而您需要指定最小長度。您可能還需要讓用戶瞭解錯誤,所以你需要一個錯誤信息,以及[StringLength(10, MinimumLength=10, ErrorMessage="* Must be 10 digits")]

對於這個問題

在一個側面說明的第二部分,是有可能拆分電話號碼,以便區號和其餘數字通過存儲過程分別發送到數據庫?

是的,使用RegEx捕獲組,你已經在做:)。

RegEx regEx = new Regex(@"(\d{3})(\d{3})(\d{4})") 
Matches matches = regex.Matches(value); 
// matches[0] contains area code 
// matches[1] contains first 3 digits 
// matches[2] contains final 4 digits 

MSDN - Regex.Matches

+0

我從一個以這種方式設計出來的人拿起了這個項目。該字段從數據庫中讀取數據。我想要做的是,如果用戶決定編輯這些數據,他/她只能輸入10位數字。感謝關於錯誤消息的提醒。 – julianc

+1

好的。如果您需要在視圖中執行此操作而不驗證unobtrusiveJS,請使用jQuery使用'.change()'函數完成此操作。此外,您的數據在模型到達View時已經存在。 View中沒有時間點從數據庫中提取數據。 $(this.txtPhoneNumber')。change(function(){$(this).val()。length == 10 $(this).prop('readonly','true'):return;}); '或者類似的東西。 – Ingenioushax

+1

你超越了@Ingenioushax。感謝您的詳細解答! – julianc