4

実行時に設定されるが、文字列の書式設定を使用するリソース ファイルの文字列に基づいているモデルを、カミソリ ビューに動的なラベルを付けたいと考えています。

単一のプロパティを持つ単純なモデルがあるとしましょう

public class Simple
{
    [Display(ResourceType = (typeof(Global)), Name = "UI_Property1")]
    [Required(ErrorMessageResourceType = (typeof(Global)), ErrorMessageResourceName = "ERROR_Required")]
    [StringLength(40, ErrorMessageResourceType = (typeof(Global)), ErrorMessageResourceName = "ERROR_MaxLength")]
    public string Property1{ get; set; }
}

リソースファイルには次の文字列があります

UI_Property1       {0}
ERROR_Required     Field {0} is required.
ERROR_MaxLength    Maximum length of {0} is {1}

そして、かみそりビューでこのようなことをしたいと思います

@Html.LabelFor(m => m.Property1, "xyz", new { @class = "control-label col-sm-4" })

結果のビューには、フィールド ラベルが「xyz」として表示され、値「xyz」は、サーバー モデルの検証から返される検証メッセージにも表示されます。

私は運がないのでこれを行うさまざまな方法を見てきました。DisplayAttribute のオーバーライドを調査しましたが、これはシール クラスです。

DisplayName 属性のオーバーライドも検討しましたが、これは必要な検証メッセージで適切に取得されません。さらに、属性コンストラクターで行う必要があると思われる属性に動的テキストを挿入する方法がわかりませんでした。

カスタム DataAnnotationsModelMetadataProvider の作成も検討しましたが、これを使用して目的を達成する方法がわかりません。これは、コーディング スキルが不足していることが原因である可能性があります。

「xyz」文字列は web.config ファイルの設定から取得され、LabelFor コマンドで挿入する必要はありませんが、より意味がある場合は別の場所に挿入できます。

どうすればこれを達成できるかについて誰かが私に手がかりを与えることができれば、それは素晴らしいことです.

4

1 に答える 1