これは、チェックボックスを作成する方法です。
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 をページに追加するときに、それらが失われているようです。
これを防ぐにはどうすればよいですか?