1

実行時にテキストが決定されるラベルを表示する必要があります。

以前は、コンパイル時にテキストがわかっていたときに、DisplayName DataAnnotationを使用して、モデルがデータをどのように表現するかを作成することができました。

例として、私はこれを持っていました:

[DisplayName("Task Template")]
public List<KeyValuePair<int, string>> TaskTemplate { get; set; }

<%= Html.LabelFor(model => model.TaskTemplate) %>
<%= Html.DropDownListFor(model => model.TaskTemplateFlag, new SelectList(Model.TaskTemplate, "Key", "Value"))%>

ただし、ここでDisplayNameは実行時に決定する必要があります。

このStackOverflowの回答によると、DataAnnotationを使用してこれを行う方法はありません。

私はベストプラクティスが何であるか疑問に思っていますか?LabelForの使用を完全に停止しますか?一連の文字列プロパティをモデルに格納し、値をプロパティにロードして、DisplayForを使用してレンダリングする必要がありますか?

更新:これはおそらく十分な解決策だと思います:

public string TaskTemplateLabel { get; set; }
public List<KeyValuePair<int, string>> TaskTemplate { get; set; }

//Constructor: TaskTemplateLabel = GetLabelFromDataSource();

<%= Html.LabelFor(model => model.CurrentDeviceName, Model.TaskTemplateLabel)%>
4

2 に答える 2

1

LabelFor私の理解によると、これはhtmlヘルパーのオーバーロードを使用するのと同じくらい簡単です

@Html.LabelFor(x => item.ID, item.ID.ToString())

上記の例では、プロパティのラベルが作成されID、テキストは実際にはプロパティの値になります

これはレンダリングされた結果です:

<label for="item_ID">7061207d-4ad4-45dd-aada-8335b98538c3</label>

これを従来の例と比較してください。

@Html.LabelFor(x => item.ID)

レンダリングするもの:

<label for="item_ID">ID</label>
于 2012-11-07T22:39:22.253 に答える
0

実行時にラベルテキストを決定するために必要なすべての入力がコンパイル時に利用できる場合は、DisplayName属性から継承する独自のデータ注釈属性を作成できます。DisplayNameクラスから継承できるかどうかはわかりませんが。封印されている場合があります。

もう1つのオプションは、独自のバージョンのLabelFor拡張メソッドを実装することです。

于 2012-11-07T22:35:35.043 に答える