如何从代码隐藏中添加无价值HTML5属性

时间:2015-04-24 16:50:42

标签: c# asp.net webforms

这是对此问题的跟进: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>

也就是说,作为一个只有键autoplaycontrols的无价值属性。

我试过

myAudio.Attributes.Add("autoplay", ""); //autoplay = "";
myAudio.Attributes.Add("autoplay", null); //autoplay attribute missing

但这些并没有产生任何令人满意的结果。

有没有办法使用无值属性渲染控件?

1 个答案:

答案 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>