2016-06-24 7 views
-1

電話番号のフィールドを最大10桁にしたいと考えています。 [stringlength]属性を配置しましたが、希望する結果が得られません。私を助けることができる人に感謝します。電話番号の長さの制限

メモ:電話番号を分割して、市外局番と残りの数字がストアドプロシージャを介して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

は、なぜあなたはASP.NET MVCを使用している場合は、入力用のHTMLタグを使用していますか?実際には、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" }) 

また、あなたが検証のためunobtrusiveJS NuGet UnobtrusiveJSを持っていることを確認してください。他のすべては、データ注釈でうまくいくようです。名前のないパラメータ[StringLength]が最大長ですが、最小長を指定する必要があります。あなたはまた、ユーザーがエラーを知らせるしたい場合がありますので、ご質問サイドノートで

の第二の部分については、エラーメッセージだけでなく[StringLength(10, MinimumLength=10, ErrorMessage="* Must be 10 digits")]

をする必要があります、それはすることが可能です市外局番と残りの数字がストアドプロシージャを介してdbに個別に送信されるように電話番号を分割します。

はい、既に行っている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

私はこのようにデザインした人からこのプロジェクトを選んだ。このフィールドは、dbからデータを読み取ります。私がしたいことは、ユーザーがこのデータを編集することを決めた場合、10桁の数字しか入力できないということです。エラーメッセージについてのお礼をお寄せいただきありがとうございます。 – julianc

+1

unobtrusiveJSの検証なしでViewでこれを行う必要がある場合は、jQueryを使用して '.change()'関数を使用してこれを実行します。また、データがビューに到達するまでにモデルにはすでに存在しています。ビューには、データがデータベースから取得される時点はありません。 ( 'readonly'、 'true'):return;}); $( '#txtPhoneNumber')。 'などのようなものです。 – Ingenioushax

+1

あなたは@Ingenioushaxを超えました。そのような詳細な答えをありがとう! – julianc