0

プロジェクトにASP.NETMVC3を使用しています。

問題は、データベースに値を保存したいということです。データベースに保存する前に、値を「クリーンアップ」する必要があります(たとえば、末尾と末尾のスペースを削除し、検証する必要があります)。

次のコードを使用してモデルをデータベースに保存する前に、メタデータクラスを使用してモデルを検証します。

if (ModelState.IsValid) {

私のメタデータクラスは次のようになります。

public class OrganizationMD {
    [Required(ErrorMessage = "*This field is required.")]
    [CustomValidationRule(ErrorMessage = "*Another error message")]
    public string OrganizationNumber;
}

私の最初のアイデアは、OrganizationNumber文字列にゲッターとセッターを与え、そこで値を「固定」にすることでした。

たとえば、組織番号として「19860415-4785」を使用して会社を保存しようとした場合、その新しい値を検証してデータベースに保存する前に、文字列の末尾の「19」とダッシュを自動的に削除する必要があります。

モデルファーストを使用して開発しているため、モデルにゲッターとセッターを与えることはできません。そうでなければ、うまくいくはずです。

誰かがこれを解決する方法を知っていますか?

4

1 に答える 1

0

ドメイン(エンティティフレームワーク)モデルを直接使用する代わりに、ビューモデルを作成して、ビューとコントローラーとの間でデータをやり取りすることができます。

ビューモデルのプロパティにデータ注釈を付けます。

public class OrganizationMDViewModel
{
    [Required(ErrorMessage = "*This field is required.")]
    [CustomValidationRule(ErrorMessage = "*Another error message")]
    public string OrganizationNumber {get; set;}
}

次に、永続化のためにドメインモデルにマッピングし直す前に、ゲッターとセッターで機能すると思われることをすべて実行できます。

読みやすく、デバッグを容易にするために、ゲッターとセッターではなくコントローラーで「クリーニング」を行うことができますが、それはあなた次第です。

[HttpPost]
public ActionResult SaveData (OrganizationMDViewModel viewModel)
{
  if (ModelState.IsValid) {
    viewModel.OrganizationNumber...//clean up the value here
    OrganizationMD = new OrganizationMD{OrganizationNumber = viewModel.OrganizationNumber}
    //...and save
  }
}
于 2012-10-24T13:04:08.940 に答える