2017-06-06 17 views
0

登録フォームに連絡先番号を保存する必要があります.2つのTextBox、Country CodeNumberの2つがあります。今私は両方を結合し、私のクラスで持っている単一のプロパティにバインドする必要があります。どうやってやるの?2つのTextBoxForプロパティを1つのプロパティにバインドしました

ビュー:

<div class="form-group"> 
     @Html.LabelFor(m => m.Phone, "Contact Number:") 
     @Html.TextBoxFor(m => m.xxxx,new { @class = "form-control", @id = "txtContactCode", required="required", type ="number" })- 
     @Html.TextBoxFor(m => m.Phone,new { @class = "form-control", @id = "txtContactNumber", required="required", type ="number" }) 
</div> 

プロパティ、今

public string Phone { get; set; } 

私は1つとして連結する電話番号フィールドのコードでプロパティをバインドすべきか?何らかの方法がありますか、Codeという別のプロパティを宣言してから続行する必要がありますか?

+2

性質 'CountryCode'と' PhoneNumber'とビューモデルを使用し、POSTメソッドで値を組み合わせて、 'Phone'プロパティ –

+0

は、モデルに値を代入するコード –

+0

@StephenMueckeでいいです表示あなたのデータモデルにマップ同じ。ありがとう – iamCR

答えて

0

一般に、物事を分割/結合しようとしないでください。潜在的な障害点をアプリケーションに導入するだけです。単一のPhoneを組み合わせて保存するだけの場合は、Phoneのフィールドに直接電話番号を入力させます。すべての電話番号に国番号が付いていることを確認する場合は、port of Google's libphonenumber libraryのような電話番号検証ライブラリを使用して、入力した電話番号を解析し、データベースに格納されている方法を標準化することができます。

2つのフィールドを1つにまとめようとすると、1つのフィールドを2つに分割しなければならないという問題があります。特に可変長の国コードのようなものでは、信頼性を高めるのが本当に難しいでしょう。あなたはこの道を行くを主張する場合は、私は次のようにビューモデルを使用してお勧めします:

public string Phone 
{ 
    get { return String.Format("{0} {1}", CountryCode, Number); } 
    set 
    { 
     CountryCode = null; 
     Number = null; 

     if (value != null) 
     { 
      var parts = value.Split(new[] { ' ' }, 2); 
      if (parts.Length == 2) 
      { 
       CountryCode = parts[0]; 
       Number = parts[1]; 
      } 
     } 
    } 
} 

public string CountryCode { get; set; } 
public string Number { get; set; } 

その後、あなたはあなたのビューで、それぞれCountryCodeNumberに結合するであろう。 Phoneのカスタムゲッターとセッターは、結合された部分と構成された部分との間で前後に翻訳を行います。

-1

IModelBinderインターフェイスで利用可能なBindModel()メソッドを使用すると簡単にこれを行うことができます。

IModelBinder.BindModelは、指定されたコントローラーコンテキストを使用して、コンテキストを結合することによって値にモデルをバインド。

this explanation with real-time exampleも参照してください。

注:上記の例でfirst_namemiddle_namelast_nameはフルネームプロパティにバインドされました。同じ方法で、必要な2つのプロパティを1つのプロパティにバインドできます。

関連する問題