Programing

asp.net MVC EditorFor에서 생성 한 HTML ID를 얻는 방법

lottogame 2020. 11. 26. 07:41
반응형

asp.net MVC EditorFor에서 생성 한 HTML ID를 얻는 방법


HTML 도우미를 사용하여 필드를 렌더링합니다.

<%=Html.EditorFor(m => m.User.Surname)%>

출력은 다음과 같습니다.

<input class="text-box single-line" id="User_Surname" 
          name="User.Surname" type="text" value="" />

도우미는 className + '.'를 사용합니다. è fieldName을 사용하여 ID를 만듭니다.
id를 jQuery 함수에 전달해야합니다. 그것을 하드 코딩하지 않고 가질 수있는 방법이 있습니까? ASP.NET MVC2 규칙을 사용할 수있는 도우미일까요?


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)


여기 에 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" %>

and finally I can use my code like this:

<%=Html.HtmlIdNameFor(m=>m.Customer.Name)%>

unless you create your own User.Surname EditorTemplate which you pass in some HTML attributes you won't be able to do this with EditorFor

However you can use TextBoxFor and set the id

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

On the topic of retrieving this element with a jQuery selector you can achieve this without having to hardcode by using some of the ends-with selector. Using that you could probably still use EditorFor and just select it with $("[id^='Surname]")`. If you're trying to select this specific element there's really no way to NOT hardcode SOMETHING in your jQuery code.

참고URL : https://stackoverflow.com/questions/4829193/how-to-get-the-html-id-generated-by-asp-net-mvc-editorfor

반응형