2011-09-16 5 views
2

タイトルはまあまあです。[Display(AutoGenerateField = false)]と[HiddenInput(DisplayValue = false)]があるのはなぜですか?

フィールドを「UIに表示しないでください」という属性には、2つの方法があるようです。 1つはDataAnnotations名前空間に属しています。私はそれが所属していると考えていますが、もう1つはMVC固有の名前空間System.Web.Mvcにあります。これは間違った場所だと思います。

これは、MVCアプリケーションの場合、「より汎用的な」ComponentModel.DataAnnotationsではなく、MVC名前空間でドメインクラスをダーティにする必要があることを意味します。

MVCフレームワークにDisplay()属性を通知する方法はありますか?

答えて

2

ViewModelsを使用してPaulの答えを書き留めておきますが、問題の一般的な解決策は、System.ComponentModel.DataAnnotations名前空間にあるUIHint属性でプロパティを修飾することです。

[UIHint("Hidden")] 

は、共有の小さなビューテンプレートを追加\ EditorTemplates \ Hidden.cshtmlテンプレートの名前がUIHint

+0

ありがとう@ stank-それは私のためにうまくいきます--uhintはこの問題の宝石です。 – Joe

+0

Silverlightに類似のソリューションがある場合は、既に知っていますか? :-) – Joe

+0

申し訳ありません - 私はSilverlightを一度も使用していません – StanK

4

ドメインのエンティティではなく、ビューでViewModelsを使用する必要があります。 ViewModel(またはコマンド)はビュー固有のものなので、System.Web.xへの参照があるかどうかは関係ありません。

私はSoCのになります。http://en.wikipedia.org/wiki/Separation_of_concerns

そしてAutomapper/Wのviewmodels:またhttp://bengtbe.com/blog/2009/04/14/using-automapper-to-map-view-models-in-asp-net-mvc/

、あなたのquesion答えるために:

[HiddenInput(DisplayValue =偽)] <input id="propId" name="propId" type="hidden" value="21" />

をレンダリングしますが

Display(AutoGenerateField = false)]はレンダリングされません。

+3

こんにちはポールに与えられた文字列に一致する

@model object @Html.HiddenFor(x => x) 

のような - に感謝私のビュー(およびオートマッパー:-))でViewModelsを使用しています。 すべての点で敬意を払って、私は "それが参考になっていれば問題ありません..."と同意しなければなりません。私が目指しているのは、Silverlightプロジェクトで自分のビューモデルを再利用することです。そのため、データアノテーションは、MVC固有のものではなく、「汎用」アセンブリからのものを使用します。 VMを共有することはパイプの夢かもしれませんが、このような懸念をすべて取り除き、UI /ロジック境界を明確に定義すれば可能です。もう一度、ありがとう。 – Joe

関連する問題