2012-01-17 3 views
1

疑問があり実用的な理由から、私はEditorTemplatesやDisplayTemplatesと同じように、LabelTemplateのデフォルトを作成したいと思います。Html.LabelとHtml.LabelFor()のLabelTemplatesをASP.NET MVCで作成することはできますか?

ので、代わりにこの:

@Html.LabelFor(x => x.PropertyName, "Property Name") 

またはその代わりに、この(ビューモデルでそれを行うには良い方法):

@Html.LabelFor(x => x.PropertyName) 

[DisplayName("Property Name")] 
public string PropertyName{ get; set; } 

私はこれをしたいです

これで(このようなフォルダ内:/ Views/Shared/LabelTemplates)

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.String>" %> 
//Display logic here 

コーダーを助けることができますか?

+0

これは、どのように 'DisplayTemplates'と違うのですか? –

答えて

1
+0

良心的な答えは、追加の検索を行い、すべてを置き換えるだけでした、ありがとう! 'パブリック静的MvcHtmlString LabelFor2 (このHtmlHelperの HtmlHelperの、式<のFunc >表現)TModelの:クラス { するvar小道具= ExpressionHelper.GetExpressionText( ここ は私の実装です式)。 var sp = AddSpaces(小道具); var lb = ""; 新しいMvcHtmlString(lb)を返します。 } ' – Agiagnoc

0

これはあなたのプロパティ名を変換するのに使用できるコードです:

Regex.Replace("PropertyName", "[a-z][A-Z]", m => m.Value[0] + " " + m.Value[1]); 
+1

ブラウザの右のタブに回答を投稿してもよろしいですか? –

+0

@DarinDimitrov実際にはテンプレートを作成する方法を理解したように見えましたが、 'PropertyName'を分割する方法を探していました。 – Craig

0

私は、これは厳密にあなたの質問への答えではないですけど、私はまだお勧めしたいので、行動計画、私はコメントの代わりにこのように投稿します。


は、あなたがこれをしてもよろしいですか?あなたがこれを行うために管理する場合

は、あなたがそのタイプに基づいていくつかの値にフィールドのラベルを設定します。これは一見すると魅力的に思えるかもしれません - あなたはおそらく、ここにいくつかの重要なストロークを保存することができます。

しかし、たとえば通りの名前、番号、郵便番号などのいくつかのプロパティを含むタイプAddressを持っていて、ユーザーが同じ形式で自宅の住所と仕事場の住所を記入したい場合はどうすればいいですか?さらに悪いことに、本当にはすべての文字列に同じラベルが必要ですか?これらの2つのシナリオを回避するには、とにかくHtml.DisplayFor(m => m.PropertyName, "TemplateName")にアクセスする必要があります。これは、あなたが既に状況が悪いことを意味します。さらに、1つではなく、ラベルに適した表示ロジックを見つけるために少なくとも2つの場所が必要です。

LabelFor()ヘルパーを使用するには、絶対的な要件がないことを忘れないでください - あなただけのようにもちょうどHtmlHelperに独自の拡張メソッドをロール、あるいはそれらを無視し、出力プレーンHTMLことができます:EditorFor()ので

<label for="Person_HomeAddress">Home address</label> <!-- the ID might be wrong --> 
<%: Html.EditorFor(m => m.HomeAddress) %> 

モデルの名前とプロパティ名にマッチしたIDを出力すると、うまくいくでしょう。

関連する問題