2012-01-09 13 views
0

@Html.TextBoxFor(m => m.MyField)を使用すると通常<input id="MyField" name="MyField" type="text" value="" />になり、jqueryの要素にアクセスしたい場合は$("#MyField")となります。手動でIDをjqueryセレクタに入力しないようにする方法はありますか? ClientIDプロパティを使用して要素のIDを取得する古典的なasp.netの背景から来ているので、私にはこのようにするのは難しいようです。したがって、レンダラーがIDの生成方法を変更した場合、コードは自動的に更新されます。上記の例でMyFieldをMyNewFieldに変更した場合、コンパイラは強く型付けされた参照をすべて変更するように指示しますが、jqueryセレクタを変更するように指示するものはありません。ASP.NET MVC3自動生成フォーム要素IDの取得

+0

@ Html.TextBoxFor(m => m.MyField、new @ class = "someClass")はできません。代わりにJQueryセレクターとしてクラスを使用しますか? ASP.NETで作業する場合、ASPは多くのIDを自動的に生成するため、フロントエンドの開発者は通常、セレクタとしてクラスを使用します。 –

+0

はい、私はそれを行うことができます - 私はハックを考慮するが、この場合、私は既にIDを持つ一意の要素を識別しようとしているので、そして、実際にそのアプローチに従って、私が望むならば同じ方法でIDをハードコードすることができます。私は、自動マジックが一貫して起こるようにするアプローチを望んでいました。たとえば、Html.LabelForとHtml.TextBoxForがあり、どちらも一貫性のあるHtml.JavascriptIdForについて何か一貫した名前を持つでしょうか? –

答えて

0

は、プロパティを取得する簡単な方法を記述し、それが反射して名前だ戻って、このようにそれを使用します。

static string GetVariableName<T>(Expression<Func<T>> expression) 
{ 
    var body = expression.Body as MemberExpression; 

    return body.Member.Name; 
} 

$('#' + @(GetVariableName(() => Model.MyField))) 

が動作するはずです。

+0

ええ、それは、私がHTMLヘルパーと同じIDを生成するために同じメカニズムを使用していることを保証するものではありません。私がオリジナルの質問にコメントするとき、ヘルパーはラベルやテキストボックスなどを生成するためにヘルパーに一貫したメカニズムを使用してIDを生成させます。生IDを取得する方法はありませんか? MVC4 MSでIDを生成する方法を変更すると、私が使用するカスタムメソッドは動作しなくなります。これが回避しようとしているものです。 –

+0

@DaleBurrell。心配しないでください。プロパティ名は生成されたIDと名前のままです。これは、MVCの 'Model Binder'がどのように動作するかです。 Microsoftが今後これを変更すれば、すべてのasp.net MVC開発者はあなただけでなく大きな問題になるでしょう。 **それは起こりません!** – gdoron

+1

あなたはおそらく正しいですが、それは私のコーディングルールに反しています:)しかし、私はあなたにこの投稿を見つけるのを助けたので答えを与えるつもりです。http://stackoverflow.com/questions/3065307/client-id-for-property-asp-net-mvcあなたの提案を受け取り、他の拡張機能と同じメカニズムを使用します。ご協力いただきありがとうございます。 –

関連する問題