这是对此问题的跟进: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
但这些并没有产生任何令人满意的结果。
有没有办法使用无值属性渲染控件?
答案 0 :(得分:3)
一种可能的解决方案是覆盖继承控件上的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>