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.
'Programing' 카테고리의 다른 글
알려진 두 값 사이의 문자열 찾기 (0) | 2020.11.26 |
---|---|
콘솔 출력을 txt 파일에 쓰는 방법 (0) | 2020.11.26 |
빌드 전 단계로 Hudson에서 다른 작업을 트리거하려면 어떻게해야합니까? (0) | 2020.11.25 |
Flask 사용자 인증 (0) | 2020.11.25 |
Excel : VBA에서 셀이 비어 있는지 확인하는 방법은 무엇입니까? (0) | 2020.11.25 |