HTMLヘルパーを使用してフィールドをレンダリングします。
<%=Html.EditorFor(m => m.User.Surname)%>
出力は次のようになります。
<input class="text-box single-line" id="User_Surname"
name="User.Surname" type="text" value="" />
ヘルパーはclassName + '。'を使用しますèidを作成するfieldName。
IDをjQuery関数に渡す必要があります。ハードコーディングせずに使用する方法はありますか? ASP.NET MVC2の規則を使用できるヘルパーかもしれませんか?
Macの答え here の指示に従い、独自のカスタム拡張機能を作成しました。
public static class HtmlHelperExtensions
{
public static string HtmlIdNameFor<TModel, TValue>(
this HtmlHelper<TModel> htmlHelper,
System.Linq.Expressions.Expression<Func<TModel, TValue>> expression)
{
return (GetHtmlIdNameFor(expression));
}
private static string GetHtmlIdNameFor<TModel, TValue>(Expression<Func<TModel, TValue>> expression)
{
if (expression.Body.NodeType == ExpressionType.Call)
{
var methodCallExpression = (MethodCallExpression)expression.Body;
string name = GetHtmlIdNameFor(methodCallExpression);
return name.Substring(expression.Parameters[0].Name.Length + 1).Replace('.', '_');
}
return expression.Body.ToString().Substring(expression.Parameters[0].Name.Length + 1).Replace('.', '_');
}
private static string GetHtmlIdNameFor(MethodCallExpression expression)
{
var methodCallExpression = expression.Object as MethodCallExpression;
if (methodCallExpression != null)
{
return GetHtmlIdNameFor(methodCallExpression);
}
return expression.Object.ToString();
}
}
アプリケーションの名前空間をインポートしました
<%@ Import Namespace="MvcApplication2" %>
最後に、次のようにコードを使用できます。
<%=Html.HtmlIdNameFor(m=>m.Customer.Name)%>
ASP.NET MVC 4には Html.IdFor() が組み込まれており、これを返すことができます。
@Html.IdFor(m => m.User.Surname)
この質問を参照してください: フォームフィールドの生成されたclientidを取得 、これは私の答えです:
私はこのヘルパーを使用します:
_public static partial class HtmlExtensions
{
public static MvcHtmlString ClientIdFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression)
{
return MvcHtmlString.Create(
htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(
ExpressionHelper.GetExpressionText(expression)));
}
}
_
他のヘルパーと同じように使用します:@Html.ClientIdFor(model=>model.client.email)
いくつかのHTML属性を渡す独自のUser.Surname EditorTemplateを作成しない限り、EditorFor
でこれを行うことはできません。
ただし、TextBoxFor
を使用してIDを設定できます
<%= Html.TextBoxFor(m => m.User.Surname, new { id = "myNewId" })%>
JQueryセレクターを使用してこの要素を取得するトピックでは、 ends-with selector のいくつかを使用することにより、ハードコードすることなくこれを実現できます。これを使用すると、おそらくまだEditorFor
を使用し、$("[id^='Surname
] ")`で選択することができます。この特定の要素を選択しようとしている場合、jQueryコードで何かをハードコードしない方法はありません。 。