2

通常のブール オブジェクトとの間で変換できる S2kBool というカスタム オブジェクトがあります。基本的に、C# のブール値を扱うのと同じ方法で、アプリケーションがレガシー データベースのブール値を扱うことができます。次に問題は、チェック ボックスを使用して S2kBool プロパティの値を設定しようとすると、失敗することです。

次のようなコードが機能します。

public class MyClass {
    public S2kBool MyProperty { get; set; }
}

MyClassInstance.MyProperty = true;

しかし、それは、bool に変換できるオブジェクトではなく、UpdateModel が実際の bool 型を期待しているようなものです。ただし、スローされた例外は非常に曖昧であるため、実際にはわかりません。

モデルは正常に更新されませんでした。

どうすればこれを回避できますか? カスタム ModelBinder は必要ですか?

ありがとう!

4

2 に答える 2

2

設定時に S2kBool プロパティの値を変更するタイプ bool の追加の bool プロパティを持つことができます。

public class MyClass {
    public S2kBool MyProperty { get; set; }
    public bool MyPropertyBool {
        get
        {
            return (bool)MyProperty;
        }
        set
        {
            MyProperty = value;
        }
    }
}

次に、HTML フォームに MyPropertyBool を配置するだけで、モデルバインダーはその型について心配することはありません。

私は、Password & HashedPassword のようなプロパティにこの手法を使用します。ここで、Password は、ModelBinder がバインドする html フォームのプロパティであり、Password のセッターでは、HashedPassword をそのハッシュに設定し、データベースなどに永続化します。

于 2009-02-26T02:00:46.300 に答える