asp.net mvc - 중첩 된 TagBuilder-TagBuilderTree-




asp.net-mvc razor (2)

TagBuilder는 HTML 요소를 빌드하기에 좋은 구현입니다. 하지만, HTML 요소에는 다른 요소가있을 수 있습니다 (저는 자식이라고 불렀습니다). 나는 Mvc 클래스에서 어떤 클래스도 찾을 수 없었다.

문제; 중첩 된 태그를 지원하는 몇 가지 클래스 (TagBuilderTree 및 TagBuilderNode)를 구현해야합니까?


TagBuilder를 사용하여 태그를 생성 할 때 발생하는 문제점은 유지 보수가 불가능 해 보입니다. 반면 StringBuilder의 AppendFormat은 코드를 유지 보수 할 수있을뿐만 아니라 효율성도 높입니다.

MattSlay의 # 1 방법을 조금 개선했습니다. StringBuilder의 AppendFormat 메서드를 한 번만 호출하고 C # 문자열 리터럴을 사용하여 형식을 정의했습니다. 결과적으로 형식은 원하는 결과와 정확히 일치하게 끝나고 효율적으로 실행됩니다.

var sb = new StringBuilder();
    sb.AppendFormat(
     @"<div class='control-group'>
          <label class='control-label' for='{0}_{1}'>{2}</label>
          <div class='controls'>
             <input id='{0}_{1}' name='{0}[{1}]' value='{3}' />
          </div>
      </div>",
      propObj.ModelType,
      propObj.ModelProperty,
      propObj.LabelCaption,
      propObj.PropertyValue);

    return new HtmlString(sb.ToString());

희망이 도움이!


별도의 TagBuilder에서 자식 요소를 빌드하고 생성 된 HTML을 부모 TagBuilder에 넣을 수 있습니다.

다음은 그 예입니다 : <select> 와 함께 일부 <option> 들 (예 : 간결함을 위해 de-fatted)

TagBuilder select = new TagBuilder("select");  

foreach (var language in languages) // never ye mind about languages
{
    TagBuilder option = new TagBuilder("option");
    option.MergeAttribute("value", language.ID.ToString());

    if (language.IsCurrent)
    {
        option.MergeAttribute("selected", "selected");
    }

    option.InnerHtml = language.Description;
    // And now, the money-code:
    select.InnerHtml += option.ToString();
}




tagbuilder