如何从代码隐藏中添加无价值的 HTML5 属性
How to add value-less HTML5 attributes from code-behind
这是这个问题的跟进:How to add <audio> tag to Content of Page in Code behind?
这里我正在创建一个这样的 audio
控件。
var myAudio = new System.Web.UI.HtmlControls.HtmlAudio();
myAudio.Attributes.Add("autoplay", "autoplay");
myAudio.Attributes.Add("controls", "controls");
myAudio.Src = "test.mp3";
Form.Controls.Add(myAudio);
这在页面中呈现为
<audio src="test.mp3" autoplay="autoplay" controls="controls"></audio>
有效。但理想情况下,我希望将其呈现为
<audio src="test.mp3" autoplay controls></audio>
也就是说,作为一个只有键 autoplay
和 controls
的无值属性。
我试过了
myAudio.Attributes.Add("autoplay", ""); //autoplay = "";
myAudio.Attributes.Add("autoplay", null); //autoplay attribute missing
但是这些都没有产生令人满意的结果。
有没有办法用无值属性呈现控件?
一个可能的解决方案是重写继承控件上的 RenderAttributes
方法。
public class MyCustomAudio : System.Web.UI.HtmlControls.HtmlAudio
{
protected override void RenderAttributes(HtmlTextWriter writer)
{
foreach (string key in this.Attributes.Keys)
{
String val = this.Attributes[key];
writer.Write(val == key
? String.Format(" {0}", key)
: String.Format(" {0}=\"{1}\"", key, val));
}
}
}
使用相同的代码:
var myAudio = new MyCustomAudio();
myAudio.Attributes.Add("autoplay", "autoplay");
myAudio.Attributes.Add("controls", "controls");
myAudio.Src = "test.mp3";
Form.Controls.Add(myAudio);
我得到了这个输出:
<audio autoplay controls src="test.mp3"></audio>
这是这个问题的跟进:How to add <audio> tag to Content of Page in Code behind?
这里我正在创建一个这样的 audio
控件。
var myAudio = new System.Web.UI.HtmlControls.HtmlAudio();
myAudio.Attributes.Add("autoplay", "autoplay");
myAudio.Attributes.Add("controls", "controls");
myAudio.Src = "test.mp3";
Form.Controls.Add(myAudio);
这在页面中呈现为
<audio src="test.mp3" autoplay="autoplay" controls="controls"></audio>
有效。但理想情况下,我希望将其呈现为
<audio src="test.mp3" autoplay controls></audio>
也就是说,作为一个只有键 autoplay
和 controls
的无值属性。
我试过了
myAudio.Attributes.Add("autoplay", ""); //autoplay = "";
myAudio.Attributes.Add("autoplay", null); //autoplay attribute missing
但是这些都没有产生令人满意的结果。
有没有办法用无值属性呈现控件?
一个可能的解决方案是重写继承控件上的 RenderAttributes
方法。
public class MyCustomAudio : System.Web.UI.HtmlControls.HtmlAudio
{
protected override void RenderAttributes(HtmlTextWriter writer)
{
foreach (string key in this.Attributes.Keys)
{
String val = this.Attributes[key];
writer.Write(val == key
? String.Format(" {0}", key)
: String.Format(" {0}=\"{1}\"", key, val));
}
}
}
使用相同的代码:
var myAudio = new MyCustomAudio();
myAudio.Attributes.Add("autoplay", "autoplay");
myAudio.Attributes.Add("controls", "controls");
myAudio.Src = "test.mp3";
Form.Controls.Add(myAudio);
我得到了这个输出:
<audio autoplay controls src="test.mp3"></audio>