22

ビューでTextBoxのラベルを作成しようとしていますが、クライアントでレンダリングされるIDを取得してスクリプトを生成するにはどうすればよいですか...例:

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

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

4

5 に答える 5

38

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

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呼び出しでこれを使用することもできます。これは、一部のJavaScriptコードがそれに対して機能するために必要になる場合があります。

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

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

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

于 2010-06-18T13:06:02.567 に答える
27

MVC4にはこれが組み込まれています。これを参照してください

于 2012-04-23T11:10:03.490 に答える
6

MVCの無料のソースコードで見つけることができるのは楽しいです。答えは次のとおりです。

@Html.IdForまたは @Html.NameFor

では、違いは何ですか?キャッチは次のとおりです。

NameForは「。」を置き換えません。に "_"。

例が必要な場合は、このクールな小さな記事を見つけました

于 2013-02-12T04:04:03.067 に答える
0

すでに述べたように、ASP.NET MVCのClientID、UniqueIDなどはWebフォームの抽象化であるため、これらについて心配する必要はありません。必要なIDを書き出すだけです。これには拡張メソッドもあります。

<%= Html.LabelFor(x => x.Name) %>
于 2010-06-18T10:59:36.433 に答える
-2

以下を使用してください。

Model.Name

「ソースの表示」を実行するか、Firebugなどでレンダリングされたテキストボックスを調べて、Html.xyzFor()メソッドが生成しているものを確認するだけです。通常、「id」属性と「name」属性の両方がプロパティ名に設定されたテキストボックスが生成されます。

于 2010-06-17T20:21:31.333 に答える