Html.LabelFor指定テキスト


83

を使用するときにテキストを指定する方法については、だれでも思いついたHtml.LabelFor(c=>c.MyField)。それはちょうどだMyField、あなたが代わりに「スーパーファンタスティック・フィールド」を望むことが画面上の表示に適切な名前ではないかもしれませんが、任意のオーバーロードがあるように表示されません。

何か案は?

回答:


139

あなたが使用するSystem.ComponentModel.DataAnnotations.DisplayAttribute

[Display(Name = "My Field")]
public string MyField { get; set; }

ResourceType属性にプロパティを設定すると、リソースファイルを使用できるようになります。

(.NET 4より前System.ComponentModel.DisplayNameAttributeは、表示名はコンパイル時定数でなければならないという警告がありました。)


9
あなたが勝者です。あなたはusing System.ComponentModel;しかし持っている必要があります。
ケザー

コードジェネレーターにこれらを自動的に吐き出させ、パスカルで囲まれた単語の間にスペースを挿入します。チャームのように機能します!
GalacticCowboy 2010年

このソリューションは非常に見栄えがしますが、私は得Error 381 An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter typeます。したがって、このソリューションはl18nには悪いようです。
マーティントーマ2013年

@mooseSystem.ComponentModel.DataAnnotations.DisplayAttributeリソースファイルの使用を許可するnew-in-.NET-4を反映するように回答を更新しました。まだ4 / 4.5を使用していない場合は、古いものSystem.ComponentModel.DisplayNameAttributeを次のように拡張できます:stackoverflow.com/a/2432520/33533
Curtis Buys

@CodeBlend T4を使用して、適切な属性を持つモデルクラスを生成していました。文字列を大文字で分割してから、スペースで再度結合する方法がありました。(3年経ちましたので、現時点ではコードを目の前に置いてはいけません...)
GalacticCowboy


26

MVC 3には新しいオーバーロードがあるため、ヘルパーのラベルのカスタムテストを指定できるはずです。


8
@ Html.LabelFor(model => model.IdCode、 "Friendly Name")
Dave Mateer

3

まだv2をダウンロードしていないので、テストできませんが、DynamicDataのように機能すると思います。その場合は、モデルで次のようにします。

[Display(Name = "The Super Fantastic Field")]
public string MyField {get;set;}

ディスプレイは利用できず、インテリセンスはどのライブラリでもそれを見つけることができません。
ケザー

System.ComponentModel.DataAnnotations.dllへの参照を追加し、System.ComponentModel.DataAnnotationsを使用して追加します。
ダニエル

むしろ、GACからSystem.ComponentModel.DataAnnotationsへの参照を追加します(つまり、参照の追加の.NETタブにあります)
Daniel

私はすでにDataAnnotationsを使用しているので、参照は問題ではありません。
ケザー

3
ああ、すみません-それは明らかにSilverlight3 / .NET 4.0です:msdn.microsoft.com/en-us/library/…その mecurtisが示唆するように、DisplayNameはあなたが望むことをするつもりだと思います。詳細は次のとおり
ダニエル

2

2つの方法があります
1 "直接注釈"
2 "リソースを使用した
注釈"直接注釈

[Display(Name = "My Field")]
public string MyField { get; set; }

リソース付きのAnnotatinos

[Display(Name = "My_Field",ResourceType = typeof(Resource))]
public string MyField { get; set; }

2番目の方法では、おそらくResource.resxという名前のリソースファイルに値を追加する必要があります 。
目的に合ったものをお使いください。


0

私はまだCP1をチェックアウトしていませんが、スコットのリリースを読み、コードがT4によって生成されたことを思い出しているようです。いつでも変更できると思いますが、CP2でオーバーロードが発生するのではないかと思います。

編集:ソースは常に利用可能であるため、メソッドを変更し、T4ジェネレーターを変更するだけで、準備は完了です。また、そのmodのチケットまたはリクエストを(どういうわけか)入れて、次のバージョンで機能するようにします。


残念ながら、私は作業のプレビューを行っていますが、フィールド名は説明の対応するものと比較してかなり偽物であるため、実際には実行可能ではありません。
ケザー

0

5つの過負荷があります。いくつかは、「スーパーファンタスティックフィールド」に設定する「文字列labelText」の2番目のパラメータを提供します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.