2012-02-14 9 views
2

MVC 3 ViewModelでプロパティの測定単位に関する追加情報を提供するために使用する属性を作成しています。これは、これを達成する最良の方法について私にはaskingに従います。MVC3アプリケーションでUIhintと追加のメタデータを結合しますか?

AdditionalValuesメタデータを介して文字列テンプレートに追加情報を渡すUnitOfMeasure属性を作成しました。理想的には、それを文字列エディタテンプレートに追加するのではなく、UnitOfMeasure用のエディタテンプレートを作成したいと考えています。

カスタムメタデータプロバイダに選択したテンプレートを変更するよう指示することはありますか?事実、プロパティーにUnitOfMeasure属性がある場合、UiHint( "UnitOfMeasure")automaticalllyをバックグラウンドで追加したいと思います。そうすれば、私はUnitOfMeasureヘルパーのコードを文字列エディタテンプレートに追加する必要はありません。

(それが唯一のオプションである場合を除き)私はUiHint制御パラメータを使用しないことを

おかげ

+0

graeme - 誰かがこの質問のためにあなたをマークしていて、なぜかそんなことを言っていませんでした。私はバランスを救済するためにあなたをマークしました! –

+0

ありがとうございます。うん、私は気づいた。私はその投稿の問題を解決してうれしいです。もし私がこれを逃したなら、これは偽りのようなもので、幸せなことです。 – GraemeMiller

答えて

5

に注意しなければならないあなたは、あなたのカスタム属性を持っている可能性がUIHintから派生:

public class UnitOfMeasureAttribute : UIHintAttribute, IMetadataAware 
{ 
    public UnitOfMeasure(): base("foo") 
    { 

    } 

    public void OnMetadataCreated(ModelMetadata metadata) 
    { 
     throw new NotImplementedException(); 
    } 
} 

、その後:

public class MyViewModel 
{ 
    [UnitOfMeasure] 
    public string Foo { get; set; } 
} 

か:

public class MyViewModel 
{ 
    public string Foo { get; set; } 
} 

とビューの場合の両方で:最初のケースで

@Html.EditorFor(x => x.Foo) 

、明らか~/Views/Shared/EditorTemplates/foo.cshtmlカスタムテンプレートは、第二のデフォルトの文字列テンプレートでに対し使用されます。

+0

それはちょうど簡単に聞こえる:)!今それをテストします。また、IMetadataAwareの目的が何であるか不思議です。私の既存の属性はAttributeから継承していますか? – GraemeMiller

+0

@GraemeMillerの目的は、カスタムのエディタテンプレートで利用できる追加のメタデータを追加することです(このように 'metadata.AdditionalValues [" foo "] =" foo bar ";')。あなたがそれを必要としない場合は、単にこのインターフェースを削除してください。あなたの質問にあなたが言及しているのを見たので、私はあなたがそれを必要と思っていました。 –

+0

助けてくれてありがとう。 – GraemeMiller

関連する問題