0

データ注釈付きの標準EFモデルがあります。2つの列があります。1つはIDで、もう1つはブール値です。データベースでは、両方ともnull許容ではありません。ただし、どちらも「非表示」属性のフラグが付けられています。フォームをサーバーにポストバックするまで、これはすべてUIに最適です。

モデルの検証に失敗します。スティーブンサンダーソンの提案でアクションフィルターを作成しようとしましたが、検証のためにサーバーに返さない値を削除できませんでした。私は結局、かなり醜いと思う次のことに戻りました:

try
{
    ModelState["LocationId"].Errors.Clear(); -- Really ugly!
    ModelState["IsEnabled"].Errors.Clear(); -- Seems really trashy to do it this way
    if (ModelState.IsValid)
    {
        location.IsEnabled = true; -- This will eventually move to my model definition
        _repo.InsertOrUpdate(location);
        _repo.Save();

        return RedirectToAction("Index");
    }
    return View();
}
catch (DataException ex)
{
    ModelState.AddModelError("dataError", ex);
    return View();
}

これをクリーンアップする方法やより良いソリューションを作成する方法について、他に何か提案やアイデアはありますか?

ありがとう

4

1 に答える 1

1

ビューモデルを使用して、表示するデータをマッピングしたり、エンティティからのユーザー入力をビューモデルにマッピングしたりできます。投稿時に、ビューモデルの入力データを検証し、それをエンティティにマップして戻し、データベースに保存します。

別の方法は[Required]、IDとブール属性からデータ注釈を削除することです。この方法はfalseを返さないModelState.IsValidはずです

于 2012-07-11T06:33:59.243 に答える