0

データ注釈付きの linq to SQL および MVC2 を使用していますが、一部の型の検証で問題が発生しています。

例えば:

[DisplayName("Geplande sessies")]
[PositiefGeheelGetal(ErrorMessage = "Ongeldige ingave. Positief geheel getal verwacht")]
public string Proj_GeplandeSessies { get; set; }

これは整数であり、フォームから正の数を取得することを検証しています。

public class PositiefGeheelGetalAttribute : RegularExpressionAttribute {
    public PositiefGeheelGetalAttribute() : base(@"\d{1,7}") { }
}

ここでの問題は、入力にテキストを書き込むときに、このエラーが表示されないことですが、モデルバインダーから「値 'Tomorrow' は Geplande sessies に対して有効ではありません」というエラー メッセージが表示されることです。

コントローラーのコード:

[HttpPost]
public ActionResult Create(Projecten p)
{
    if (ModelState.IsValid)
    {
        _db.Projectens.InsertOnSubmit(p);
        _db.SubmitChanges();

        return RedirectToAction("Index");
    }
    else
    {
        SelectList s = new SelectList(_db.Verbonds, "Verb_ID", "Verb_Naam");
        ViewData["Verbonden"] = s;
    }

    return View();
}

私が望んでいるのは、モデル バインダーの前にデータ注釈を実行できるようにすることですが、それはほとんど不可能に思えます。私が本当に望んでいるのは、自分で書いたエラー メッセージが画面に表示されることです。

DateTime にも同じ問題があります。ユーザーに特定の形式 'dd/MM/yyyy' で書き込んでもらいたいのですが、そのための正規表現があります。しかし、繰り返しになりますが、データ注釈が機能するまでには、元の文字列ではなく、DateTime オブジェクトだけが取得されます。したがって、入力が日付でない場合、正規表現は実行されません。モデル バインダーが DateTime にできないため、データ注釈が null になるだけです。

これを機能させる方法を知っている人はいますか?

4

1 に答える 1

2

2つのオプション:

(1)すべてのフィールドが文字列であるProjectenviewModelを作成できます。このようにして、viewModelは常に投稿されたデータから作成され、データ注釈の検証は常に評価されます。明らかに、AutoMapperを使用して、viewModelを適切に入力されたビジネスオブジェクトにマップします。

(2)モデルバインダーをサブクラス化できます。

于 2010-02-18T15:09:17.417 に答える