Jon*_*Jon 5 .net c# asp.net html-agility-pack
这就是我创建我的复选框的方式:
HtmlInputCheckBox checkbox = new HtmlInputCheckBox();
checkbox.ID = _Data.ControlID;
checkbox.Attributes.Add("class", "checkbox");
checkbox.Attributes.Add("autocomplete", "off");
sReplacementString = element.RenderToString();
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
这会在输入上生成一个带有结束标记的字符串,我可以在调试时看到这一点.
<input name="ttWBF_1" type="checkbox" id="ttWBF_1" autocomplete="off" class="checkbox" />
Run Code Online (Sandbox Code Playgroud)
然后使用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);
Run Code Online (Sandbox Code Playgroud)
但是在HTML中,复选框的输入标记缺少其自动关闭斜杠,因此无法通过WC3验证.
<input name="ttWBF_1" type="checkbox" id="ttWBF_1" autocomplete="off" class="checkbox">
Run Code Online (Sandbox Code Playgroud)
我的文本框以相同的方式生成.使用敏捷包将HTML添加到页面时,看起来好像迷路了.
我该如何防止这种情况?
vol*_*pav 14
尝试设置"OptionWriteEmptyNodes"标志:
HtmlDocument doc = new HtmlDocument();
doc.OptionWriteEmptyNodes = true;
// ....
Run Code Online (Sandbox Code Playgroud)
UPDATE
由于我的原始答案被拒绝,这是另一种可能的解决方案.
在呈现之前,您是否将正确的DOCTYPE传递给HTML文档?看看这个SO问题,了解如何插入DOCTYPE:通过HTML Agility包将文档类型添加到HTML
最后,我很痛苦地说,我又使用正则表达式处理 HTML,以添加丢失的自关闭标签。我希望有一个更好的解决方案,因为这是 hacky 并且不能保证未来的效果 - 必须为每个需要更正的标签添加它:
sXHTML = Regex.Replace(sXHTML, "<input(.*?)>", "<input $1 />");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5429 次 |
最近记录: |