2012-03-28 11 views
7

EditorForModelのカスタマイズと、自分のコードと組み込みのMVC3ヘルパーによって生成されるHTML要素の名前付けに苦労しています。私のコードは非常にシンプルで、レンダリングされた要素に適切な名前を付けるなどの微妙な要素がはっきりしていません。MVC3エディタテンプレートのカスタマイズに関する高度なリソースを探しています

私の現在の開発のこの分野を磨くのに役立つ先進的なリソースを探しています。特に、小さなサブモデル間でメインビューモデルを細分することで、1つのビューで3つのEditorForModelコールを適用することができます生成されたモデルエディタをフォーム列またはタブページに分割することができます。次のようにデフォルトEditorForModelテンプレートの

私の現在の「オーバーライド」は次のとおりです。

@{ 
    // TODO Filtering for subsets of model without having to bind separate models. 
     var properties = ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !pm.IsComplexType && !ViewData.TemplateInfo.Visited(pm)); 
    } 
<fieldset> 
    <legend>@ViewData.ModelMetadata.DisplayName</legend> 
    <ul class="form-column"> 
     @foreach (var prop in properties) 
     { 
      <li> 
        @{ 
      if (prop.HideSurroundingHtml) 
      { 
         @Html.Editor(prop.DisplayName ?? prop.PropertyName) 
      } 
      else 
      { 
         @Html.Label(prop.PropertyName, (prop.IsRequired ? "* " : "") + (prop.DisplayName ?? prop.PropertyName)) 
         @Html.Editor(prop.PropertyName) 
      } 
        } 
      </li> 
     } 
    </ul> 
</fieldset> 

私はBrad Wilson's blogthis article上Object.ascx例テンプレートからこのコードをコピーして変更しています。できるだけ豊かな方法で、可能な限り多くのシナリオに対応するためにこれを充実させるために、私はどのようなリソースを調べることができますか?

+1

にあなたが強力なHTMLテンプレートを探しているなら、私はFubuMVCチームからHTMLテンプレート規則をチェックアウトすることをお勧めします。それらはASP.NET MVCと100%互換性があり、柔軟性があり/構成可能です。私は2年以上それらを使用してきたし、絶対にそれを愛する。 http://craigcav.wordpress.com/2011/11/22/applying-conventions-in-asp-net-mvc/ Nickの記事をクリックすると、ASP.NET MVCでこの作業を行う方法へのリンクがあります。 – Ryan

+1

私はあなたがそのテンプレートよりも優れているとは思えません。つまり、ラベルのリスト+各プロパティのエディタまたは表示です。オブジェクトテンプレートを非常に汎用的にするには、Order属性を処理してプロパティを表示する順番を決定するだけです。反対側では、テンプレートの構成方法を制御するカスタム属性に基づいてフレームワークを設計することができます。しかし、これはあなたのアプリケーションに強く依存します。 –

答えて

1

あなたのテンプレートは、非常に一般的なエディタに適しているようです。あなたの質問が適切に理解できれば、モデルプロパティを分割してフィルタリングする方法が増えています。

サブモデルを作成せずにモデルをサブセットにフィルタリングする1つの方法は、属性を使用することです。必要な数の属性を作成し、IMetadataAwareを実装させることができます。ここでは、ModelMetadata.AdditionalValuesプロパティバッグに任意のプロパティを追加し、それらの値をエディタテンプレートで検査することができます。

また、任意のプロパティを持つカスタムModelMetadataオブジェクトを返す独自のカスタムModelMetadataProviderを実装することもできます。

モデルにアノテーションを付けてフィルタの動作を定義するだけです。

どちらも、これらのメソッドは、他の誰で記述されている、ブラッド・ウィルソンは、このblog post.

+0

ありがとう@bhamlin、私はサブモデルを分割するための属性を考慮しました。これは、カスタムXMLメタデータプロバイダを開発するエキサイティングな見通しを呼び出すかもしれないので、私は実際にデザイナを使ってメタデータを管理することができます。非常に記事ポインタ、ありがとう。 – ProfK

関連する問題