문제

내 ASP.NET MVC 응용 프로그램에 대한 Html 도우미 파일이 있습니다.대부분은 단순히 형식이 지정된 문자열을 반환합니다.

다음은 형식이 지정된 문자열 도우미 중 하나의 예입니다.

public static string Label(this HtmlHelper helper, string @for, string text)
{
    return string.Format("<label for \"{0}\">{1}</label>", @for, text);
}

다음은 위와 동일한 결과를 제공하는 TagBuilder 버전입니다.

public static string Label(this HtmlHelper helper, string @for, string text)
{
    var builder = new TagBuilder("label");
    builder.Attributes.Add("for", @for);
    builder.SetInnerText(text);
    return builder.ToString(TagRenderMode.Normal);
}

이제 혼합 구현을 통해 MVC에 대해 읽거나 배우고 있는 몇 가지 사이트가 있습니다.일부는 TagBuilder 방법, 다른 사람들이 사용하는 방법 string.Format(), 일부는 둘 다 같은 의미로 사용합니다.

label 태그는 다소 단순하므로 인스턴스화하는 것보다 형식이 지정된 문자열을 반환하는 것이 '더 낫습니다'. TagBuilder 이와 같은 태그에 대한 클래스가 있나요?

성능에 대해 반드시 걱정할 필요는 없습니다. 왜 일부는 TagBuilder를 선택하고 다른 일부는 형식화된 문자열을 사용하는지 궁금합니다.

깨달음을 주셔서 감사합니다!

도움이 되었습니까?

해결책

TagBuilder를 사용하면 태그의 속성을 병합 할 수 있습니다. 예를 들어, string.format을 사용하여 조건부로 CSS 클래스 속성을 태그에 갖고 싶다면 다음과 같은 작업을 수행해야합니다.

String.Format("<label {0}>Text</label>", (includeClass ? "class=\"Something\"" : ""));

TagBuilder의 경우 키/값 사전을 전달하는 Mergeattributes ()를 사용할 수 있습니다. 열린 반사판을 팝업하고 소스를 잡고 System.web.mvc.html.inputhelper ()를보고 조건부 속성을 가진 빌더를 사용하는 힘에 대한 아이디어를 얻으십시오.

둘 다 동일한 출력을 초래할 수 있지만 실제로 달성하고자하는 것에 달려 있습니다. 또한 "클리너"코드로 간주되는 것에 따라 다릅니다.

다른 팁

Tagbuilder는 편의 클래스입니다.태그 속성의 사전을 저장한 다음 HTML을 한 번에 출력합니다.또한 꺾쇠 괄호를 추가하는 작업을 처리할 필요가 없습니다.이는 기본적으로 코드에서 수행하는 것과 동일한 작업을 수행합니다. 하나의 속성, 귀하의 방식이 편리할 수도 있습니다.

Tagbuilder는 HTML 도우미에 의해 내부적으로 사용됩니다.

TagBuilder는 속성 값의 HTML 인코딩을 처리합니다. setInnerText () Encodes, .innerHtml은 그렇지 않습니다. 또한 문자열 대신 TagBuilder를 반환하면 나중에 흐름에서 CSS 클래스 또는 속성을 쉽게 추가 할 수 있습니다.

StringBuilder 대신 TagBuilder를 사용하는 이유는 무엇입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top