プロパティのクライアント ID (ASP.Net MVC) 質問する

プロパティのクライアント ID (ASP.Net MVC) 質問する

ビュー内のテキスト ボックスにラベルを付けようとしていますが、クライアントでレンダリングされる ID を取得してスクリプトを生成する方法を知りたいです。例:

<label for="<%=x.Name.ClientId%>"> Name: </label>
<%=Html.TextBoxFor(x=>x.Name) %>

正しい ID が対応するコントロールにレンダリングされるようにするには、「ClientId」に何を入力する必要がありますか?

ベストアンサー1

このコードをどこかに置きます:

using System; 
using System.Linq.Expressions; 
using System.Web.Mvc; 

namespace MvcLibrary.Extensions 
{ 
    public static class HtmlExtensions 
    { 
        public static MvcHtmlString FieldIdFor<TModel, TValue>(this HtmlHelper<TModel> html,
            Expression<Func<TModel, TValue>> expression) 
        { 
            string htmlFieldName = ExpressionHelper.GetExpressionText(expression); 
            string inputFieldId = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName); 
            return MvcHtmlString.Create(inputFieldId); 
        } 
    } 
}

次に、ASPX ビューで次の操作を実行します。

<label for="<%= Html.FieldIdFor(m => m.EmailAddress) %>">E-mail address:</label> 
<%= Html.TextBoxFor(m => m.EmailAddress) %>

コントロールの ID は事前にはわからないため、JavaScript コードでコントロールを操作するために ID が必要になる可能性があるので、JavaScript 呼び出しでもこれを使用できます。

<script> $.CoolJQueryFunction('<%= Html.FieldIdFor(m => m.EmailAddress) %>'); </script>

ここで誰かが言及した LabelFor HTML ヘルパー メソッドでは、実際に使用するテキスト ラベルを指定できません。ラベル テキストを設定するには、ViewModel を属性で装飾する必要がありますが、これは見苦しいと思います。ドメイン/ビュー モデルではなく、実際の ASPX ビュー部分自体にその内容が表示されるようにしたいと思います。ただし、私の意見に同意しない人もいるでしょう。

自分のブログ投稿へのリンクを投稿する際のルールはよくわかりませんが、まさにこのトピックについてブログを投稿しました:http://www.dominicpettifer.co.uk/Blog/37/strongly-typed--label--elements-in-asp-net-mvc-2

おすすめ記事