HTML 민첩성 팩 - 입력에서 자체 마감 태그 제거

.net asp.net c# html-agility-pack

문제

이것이 내 확인란을 만드는 방법입니다.

HtmlInputCheckBox checkbox = new HtmlInputCheckBox();
checkbox.ID = _Data.ControlID;
checkbox.Attributes.Add("class", "checkbox");
checkbox.Attributes.Add("autocomplete", "off");
sReplacementString = element.RenderToString();

RenderToString 은 다음을 수행하는 확장입니다.

public static string RenderToString(this Control control)
{
    StringBuilder sb = new StringBuilder();
    using (StringWriter writer = new StringWriter(sb))
    {
        using (HtmlTextWriter htmlWriter = new HtmlTextWriter(writer))
        {
            control.RenderControl(htmlWriter);
        }
    }
    return sb.ToString();
}

이것은 입력에 닫는 태그가있는 문자열을 생성합니다. 디버깅 할 때 이것을 볼 수 있습니다.

<input name="ttWBF_1" type="checkbox" id="ttWBF_1" autocomplete="off" class="checkbox" />

그런 다음 Agility Pack을 사용하여 HTML에 추가됩니다.

HtmlNode temp = doc.CreateElement("temp");
temp.InnerHtml = sReplacementString;
HtmlNode current = inputNode;

foreach (HtmlNode child in temp.ChildNodes)
{
    inputNode.ParentNode.InsertAfter(child, current);
    current = child;
}
inputNode.ParentNode.RemoveChild(inputNode);

그러나 HTML에서 확인란의 입력 태그에는 자체 닫는 슬래시가 없으므로 WC3 유효성 검사가 실패합니다.

<input name="ttWBF_1" type="checkbox" id="ttWBF_1" autocomplete="off" class="checkbox">

이것은 같은 방식으로 생성 된 내 텍스트 상자에서 발생합니다. 민첩성 팩을 사용하여 HTML을 페이지에 추가 할 때 길을 잃은 것처럼 보입니다.

어떻게 이것을 막을 수 있습니까?

수락 된 답변

결국 나는 HTML 태그를 정규식으로 처리하여 다시 자동 완성 태그를 추가한다고 말했습니다. 나는 이것이 더 이상 해커가 아니라 미래의 증거가 아닌 더 나은 해결책을 원한다. - 수정이 필요한 모든 태그에 추가되어야한다.

sXHTML = Regex.Replace(sXHTML, "<input(.*?)>", "<input $1 />");

인기 답변

"OptionWriteEmptyNodes"플래그를 설정하십시오 :

HtmlDocument doc = new HtmlDocument();
doc.OptionWriteEmptyNodes = true;

// ....

최신 정보

원래의 답변이 거부되었으므로 여기에 또 다른 해결책이 있습니다.

그것을 렌더링하기 전에 올바른 DOCTYPE을 HTML 문서로 전달하고 있습니까? DOCTYPE을 삽입하는 방법에 대한이 SO 질문을보십시오 : HTML 민첩성 팩을 통해 HTML에 Doctype 추가



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.