我发现了一些奇怪的行为,我想知道是否有人能在这里帮忙。
我正在使用继承addAttribute方法的XhtmlTextWriter类创建一个表单。我正在创建一个input
标记,它需要一个漂亮的(HTML5(占位符属性。addAttribute
方法有两个参数:属性名称和值。属性名称可以从HtmlTextWriteAttribute
枚举中拾取,也可以作为字符串手动输入。由于"占位符"在枚举中不可用,我使用了以下代码:
StringWriter sw = new StringWriter();
XhtmlTextWriter html = new XhtmlTextWriter(sw);
html.AddAttribute(HtmlTextWriterAttribute.Type, "text");
html.AddAttribute(HtmlTextWriterAttribute.Name, "firstname");
html.AddAttribute("placeholder", "First Name");
html.AddAttribute("maxlength", "25");
html.RenderBeginTag(HtmlTextWriterTag.Input);
html.RenderEndTag();//input
return sw.ToString();
这很好地创建了元素&指定了属性。。。占位符除外:
<input type="text" name="firstname" maxlength="25"></input>
有人知道我的占位符在哪里吗?(正如您在maxlength
中看到的,使用字符串作为属性名称有效…(
注意:这确实有效,但不太好看:
html.WriteBeginTag("input");
html.WriteAttribute("type", "text");
html.WriteAttribute("placeholder", "First Name");
html.Write(HtmlTextWriter.SelfClosingTagEnd);
//更新:required
属性存在相同问题。。。它可能是HTML5特定的东西吗?
这是因为您使用的是XhtmlTextWriter
,它对属性非常严格,不会写出未识别的属性(因为需要生成有效的XHTML(。你有两个选择。
一:改用HtmlTextWriter
:
HtmlTextWriter html = new HtmlTextWriter(sw);
二:如果出于某种原因需要使用XhtmlTextWriter
,可以在将属性添加到元素之前,将placeholder
添加为input
元素的已识别属性:
html.AddRecognizedAttribute("input", "placeholder");