62
задан 18 August 2011 в 12:02

4 ответа

Я следовал инструкциям ответа 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)%>
9
ответ дан 31 October 2019 в 13:10

ASP.NET MVC 4 имеет HTML. IdFor () созданный в этом может возвратить это:

@Html.IdFor(m => m.User.Surname)
138
ответ дан 31 October 2019 в 13:10

Посмотрите этот вопрос: получают сгенерированный 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)

43
ответ дан 31 October 2019 в 13:10

если Вы не создаете своего собственного Пользователя. Фамилия EditorTemplate, который Вы передаете в некоторых HTML-атрибутах, Вы не сможете сделать это с EditorFor

Однако, можно использовать TextBoxFor и установить идентификатор

<%= Html.TextBoxFor(m => m.User.Surname, new { id = "myNewId" })%>
<час>

По теме получения этого элемента с селектором jQuery, который можно достигнуть этого, не имея необходимость к hardcode при помощи части из концы - с селектором . Используя это Вы могли, вероятно, все еще использовать EditorFor и просто выбрать его с $("[id^='Surname]")'. При попытке выбрать этот определенный элемент нет действительно никакого пути к НЕ hardcode ЧТО-ТО в Вашем коде jQuery.

7
ответ дан 31 October 2019 в 13:10

Другие вопросы по тегам:

Похожие вопросы: