Я следовал инструкциям ответа Mac здесь , и я создал свое собственное расширение:
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)
если Вы не создаете своего собственного Пользователя. Фамилия EditorTemplate, который Вы передаете в некоторых HTML-атрибутах, Вы не сможете сделать это с EditorFor
Однако, можно использовать TextBoxFor
и установить идентификатор
<%= Html.TextBoxFor(m => m.User.Surname, new { id = "myNewId" })%>
<час> По теме получения этого элемента с селектором jQuery, который можно достигнуть этого, не имея необходимость к hardcode при помощи части из концы - с селектором . Используя это Вы могли, вероятно, все еще использовать EditorFor
и просто выбрать его с $("[id^='Surname
]")'. При попытке выбрать этот определенный элемент нет действительно никакого пути к НЕ hardcode ЧТО-ТО в Вашем коде jQuery.