0

私はモデルプロパティを持っています:

[HiddenInput(DisplayValue = false)]
public string MyProperty { get; set; }

プロパティを表示すると、何も表示されません:

@Html.Display("MyProperty")

これは表示用であるため、使用しようとしていないことに注意してください。

@Html.Editor("MyProperty")

次を使用すると、値が表示されます。

@Html.Value("MyProperty")

...しかし、これは DisplayTemplates をバイパスします。

MVC レンダリング ロジックには、前述の属性で値の表示を停止する何かがあると推測してい[HiddenInput]ますが、それを明示的に行いたい場合は、[ShowForDisplay(false)].

何か案は?

4

2 に答える 2

3

Display関数「文字列式で表されるオブジェクト内の各プロパティの HTML マークアップを返す」( http://msdn.microsoft.com/en-us/library/ee310174(v=vs.98).aspxを参照)。

これが意味することは、フィールドが非表示のフィールドである場合、実際にマークアップが吐き出されますが、マークアップが非表示フィールドのマークアップであるため、ページ上に直接何も表示されないということです。の行に沿って何かを取得します<input type="hidden" value="your value" />。ページコードを見ると、マークアップがあることがわかります。

ページに値だけを表示したい場合は、単純に@Model.Property. 値をコントロールに入力したい場合は、多くの@Htmlベースのコントロールのいずれかを呼び出しModel.Propertyて、デフォルト値として入力できます。

個人的には、ページがモデルでどのように見えるべきかを定義するという考えは好きではありません。私にとって、値自体はモデルによって管理されるべきですが、それがどのように表示されるかはビュー自体に任せるべきです。


ここでは、入力ビューではなくディスプレイで作業していることを理解しています。それにもかかわらず、このHiddenInput属性は、エディターがフィールドに対して ( などで@Html.EditorFor()) レンダリングされるとき、非表示の入力 HTML 要素であるべきであることを単に示しています。エディターをレンダリングしようとしていない場合、この属性は結果に影響を与え@Model.Propertyず、前述のように要素を画面上にレンダリングするだけで済みます。

于 2012-12-19T12:39:54.983 に答える
0

[HiddenInput(DisplayValue = false)] の代わりに [HiddenInput] だけを試すことができます。これにより、フィールドが自動的に表示され、ラベルとして編集されます。お役に立てれば。

于 2013-05-14T15:29:05.267 に答える