2011-12-08 9 views
3

私はこのようなもののトンに実行している:私はかみそりの形で情報を結合しモデル化し、前後に結合得ることができるように親オブジェクトプロパティのデフォルトのバインディングプロパティを設定するにはどうすればよいですか?

public class TestClass 
{ 
    public string Property1 {get;set;} 
    public string Property2 {get;set;} 
    public AddressType Type {get;set;} 
    [RequiredIf("", "", ErrorMessage="...")] 
    public int TypeId 
    { 
     get 
     { 
      if (Type == null) 
       return 0; 
      else 
       return Type.Id; 
     } 
     set 
     { 
      Type = new AddressType() { Id = value }; 
     } 
    } 
} 

public class AddressType 
{ 
    public int Id {get;set;} 
    public string Description {get;set;} 
} 

。私はそこに誰かが "AddressType"に対して属性を適用してクラスの既定のバインディングプロパティを設定するか、TestClassの 'Type'フィールドに対して属性を設定して "When実際にType.Idにバインドしますが、そうでなければオブジェクト全体に対して検証してください。

私はこの権利を求めているのかどうかはわかりませんが、できるだけクリーナーの実装がほしいと思っています。型IDをクラスの不要な嫌なものであり、それを読み、それを困難にしている。

Thxをみんな![OK]を

答えて

0

加えるように私はあなたがここに求めているものを越えて100%ではないが、私はそれをあげますAddressTypeがnullaであると仮定してble。

public class TestClass 
{ 
    public AddressType? Type {get;set;} 
    public int TypeId 
    { 
     get 
     { 
      return Type.HasValue ? Type.Value.Id : 0; 
     } 
    } 
} 

AddressTypeを見ると、私はそのルックアップタイプがある種のデータストアから供給されていると推測しています。私はT4テンプレートを使って、アプリケーションの列挙型としてこれらの種類のルックアップリスト(リリース間の値を変更しない)を生成します。あなたがそれをしたら、あなたはストレスの束を和らげます。何がしたいことは、あなたのかみそりビュー内のAddressType値のドロップダウンリストであれば今、あなたは、コントローラで仕事の少し大きいをしなければならないとしている

(あまりありがたいことに)

public class BetterTestClass 
{ 
    public AddressType? Type {get;set;} 
} 

...あなたは@ Html.DropDownList

EDITを検索する場合、あなたのAddressController

public ActionResult Create(){ 

    // the name in the ViewBag should match 
    // the property you want to have a list on 
    ViewBag.Type = repository 
        .AddressTypes 
        .ToList() 
        .Select(p => new SelectListItem { 
            Key = p.Id, 
            Value = p.Description}); 

    ViewData.Model = new BetterTestClass(); 
    return View(); 
} 

では例の多くは、周りにあります

あなたの質問によって達成しようとしていることを解決することは本当に難しいです。しかし、私は試して助けます。まず、私が正しくあなたの質問を理解して実行します。それはあなたがAddressTypeにIDをしたい何らかの理由Entityクラス

  • あるので

    • TestClassをがAddressTypeにして0..1の関係を持ってい
    • アドレスタイプは、IDを持っていますAddressTypeが設定されているときにUIを介して設定されます。 (あなたが必要とする属性を必要としないことを私の答えで概説しました)
  • +0

    Idでのバインドに基づいて実際に適切なAddressTypeを選択したという検証をどのように戻ってマップしますか?現在、私たちはそれをやっているし、 "TestClass"オブジェクトに対してAddressTypeIdを公開して、検証を期待どおりに処理できるようにする必要があります。 –

    +0

    あなたはこれを読んでいるhttp://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx – Peter

    +0

    私は "はい"と信じています..私のドロップダウンリストは、すべての私のアドレスタイプをリストする必要がありますし、IDでドロップダウンリストにバインドする必要がありますが、私はTestClassでAddressTypeIdを公開したくない...私はただオブジェクトを公開したい"AddresType"を含むTestClassのプロパティ。 –