2011-07-19 9 views
6

ASP.NETのHTMLヘルパーがPOCOプロパティと同じ場合にname属性とid属性を生成するのは嫌です。ASP.NET MVCで小文字の名前とid属性を持つ要素を生成できるか

ほとんどの開発者は、通常、名前とIDに小文字の値を使用しますが、ASP.NET MVCでこれを実現する方法が見つからないようです。

ソースを見ると、この機能を無効にする方法はないことがわかりますが、間違っている可能性があります。

これはすべて可能ですか?

EDIT: 私はいくつかの混乱があるようですので、話しています何の例を挙げて、より具体的になるでしょう。私のモデルは、このようになります

:私の見解では

public class Customer 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

私はそうようなHTML herlpersを使用します。

@Html.InputFor(m => m.FirstName) 

これは、このようになりますマークアップを生成します。

<input type="text" name="FirstName" id="FirstName" value="" /> 

I FirstNameプロパティが大文字であることが嫌いです。完璧な世界では、この属性値の生成をオーバーライドして、代わりに "firstName"と言うことができるようにしたいと思います。

私はPOCOプロパティ名を小文字に変更したくありません。 ASP.NET MVCフレームワークの多くは、拡張可能でカスタマイズ可能です。これはそうではありませんか?

答えて

1

Display(Name = "abc")属性は、Html.LabelForの出力を変更し、EditorForModelとDisplayForModelを使用すると変更します。 Html.TextBoxForがレンダリングされる方法に影響を及ぼさず、フォームフィールドのID属性または名前属性をレンダリングする方法を変更することは想定されていません。あなたが本当にそうする必要がある場合は、

public static MvcHtmlString LowerTextBoxFor<TModel,TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel,TProperty>> expr) 
     { 
      StringBuilder result = new StringBuilder(); 
      TagBuilder tag = new TagBuilder("input"); 
      tag.MergeAttribute("type","text"); 
      var lowerPropertyName = ExpressionHelper.GetExpressionText(expr).ToLower(); 
      tag.MergeAttribute("name",lowerPropertyName); 
      tag.MergeAttribute("id",lowerPropertyName); 
      result.Append(tag.ToString()); 
      return new MvcHtmlString(result.ToString()); 
     } 

のようなHTMLヘルパーを使用することができます。

@Html.LowerTextBoxFor(x=>x.Property1) 

この例では、id属性とname属性のみを生成することに注意してください。あなたは控えめな属性やこのメソッドの他のオーバーロードを有効に使うためにこのような他の属性をコーディングする必要があります

+0

これは私がやったことですが、ヘルパー全員を自分で書き換えるよりも良い答えがあることを願っています。 –

+0

おそらく、あなたができることは、htmlAttributesオブジェクトのname属性とid属性をオーバーライドすることです –

関連する問題