web-dev-qa-db-ja.com

MVC3のカミソリのLabelForの表示名を変更するにはどうすればよいですか?

かみそりエンジンでは、LabelForヘルパーメソッドを使用して名前を表示しました

しかし、表示名は表示するのが良くないようです。だから私はそれを行うには表示名を変更する必要があります....

@Html.LabelFor(model => model.SomekingStatus, new { @class = "control-label"}) 
79
Sham

[DisplayName]属性を使用してビューモデルプロパティを修飾し、使用するテキストを指定できます。

[DisplayName("foo bar")]
public string SomekingStatus { get; set; }

または、テキストを指定できるLabelForヘルパーの別のオーバーロードを使用します。

@Html.LabelFor(model => model.SomekingStatus, "foo bar")

そして、いいえ、あなたがしようとしてMVC3でクラス名を指定することはできません。LabelForヘルパーはそれをサポートしていないからです。ただし、これはMVC4または5で機能します。

153
Darin Dimitrov

これは古い質問でしたが、既存の回答では、モデルを再生成するときにカスタム属性を破棄するという深刻な問題を無視しています。現在利用可能なオプションをカバーするために、より詳細な回答を追加しています。

次の3つのオプションがあります。

  • [DisplayName("Name goes here")]属性をデータモデルクラスに追加します。欠点は、データモデルを再生成するたびにこれが破棄されることです。
  • Html.LabelForに文字列パラメーターを追加します。例えば@Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"})リファレンス: https://msdn.Microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor(v = vs.118).aspx これの欠点は、すべてのビューでラベルを繰り返す必要があることです。
  • 3番目のオプション。データクラスに添付されたメタデータクラスを使用します(詳細は以下)。

オプション3-メタデータクラスを追加します。

Microsoftは、Entity Frameworkクラスのプロパティを装飾することを許可しています既存のクラスを変更せずに!これは、データベースクラスにアタッチするメタデータクラスを持つことにより(事実上、EFクラスの横方向の拡張)。これにより、属性を関連クラスに追加でき、クラス自体には追加できませんデータモデルを再生成しても変更は失われません

たとえば、データクラスがMyModelプロパティを持つSomekingStatusである場合、次のようにできます。

最初に、同じ名前の partial class を宣言し(同じ名前空間を使用)、オーバーライドせずにクラス属性を追加できます。

[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}

生成されたデータモデルクラスはすべて部分クラスであり、同じ名前のクラスを作成するだけで追加のプロパティとメソッドを追加できます(これは非常に便利で、たとえばモデル内の他のフィールドタイプの書式設定された文字列バージョンを提供するために使用します)。

ステップ2:新しい部分クラスによって参照されるメタデータクラスを追加します。

public class MyModelMetaData
{
    // Apply DisplayNameAttribute (or any other attributes)
    [DisplayName("My New Label")]
    public string SomekingStatus;
}

参照:https://msdn.Microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v = vs.110).aspx

ノート:

  • メモリから、メタデータクラスの使用を開始すると、実際のクラス([required]など)の既存の属性が無視される可能性があるため、メタデータクラスの属性を複製する必要があります。
  • これは魔法では動作せず、どのクラスでも機能しません。 UIデコレーション属性を検索するコードは、最初にメタデータクラスを検索するように設計されています。
29
Gone Coding

DisplayName属性でプロパティを装飾することにより、ラベルのテキストを変更できます。

[DisplayName("Someking Status")]
public string SomekingStatus { get; set; }

または、生のHTMLを明示的に記述することもできます。

<label for="SomekingStatus" class="control-label">Someking Status</label>
14
xandercoded

モデルプロパティをDisplayName属性で装飾します。

3
Teppic

@ Html.LabelFor(model => model.SomekingStatus、 "foo bar")

0
Anurag