我尝试使用svg
元素在外部引用中将use
放入我的页面中,如下所示:
<svg class="xyz" width="25px" height="25px" fill="red" xmlns:xlink="http://www.w3.org/1999/xlink">
<use id="useLogo" runat=server class="xyz" href="~/Content/images/test.svg#shape" xlink:href="~/Content/images/test.svg#shape"></use>
</svg>
问题是我在用户控件中执行此操作,因此我需要引用相对于应用程序的svg
文件,而不是用户控件所在的页面。
我决定使用~
和href
属性中的xlink:href
字符,然后使用page_load
:
protected void Page_Load(object sender, EventArgs e) {
this.useLogo.Attributes["href"] = Page.ResolveUrl(this.useLogo.Attributes["href"]);
//this.useLogo.Attributes["xlink:href"] = Page.ResolveUrl(this.useLogo.Attributes["xlink:href"]);
}
这确实有效,但为了向后兼容,我需要对xlink:href
属性做同样的事情。由于元素的AttributeCollection
没有该属性的项,因此名称空间似乎正在瘫痪ASP.Net。有没有办法识别命名空间属性,还是有完全不同的方法来做到这一点?
答案 0 :(得分:1)
如果您在浏览器中运行应用程序并查看来源,您会发现xlink:href
已被删除,您的控件将呈现为:
<use id="MainContent_useLogo" class="xyz" href="~/Content/images/test.svg#shape"></use>
请注意,runat
属性也缺失了。所有这些都是ASP引擎处理标签的结果,ASP引擎决定如何处理每个属性。
由于这两个属性已被删除,Attributes
属性不包含这些属性,并且只包含class
和href
。
由于您希望href
和xlink:href
属性具有相同的值,因此您只需以编程方式添加xlink:href
属性并将其设置为href
的值即可属性:
useLogo.Attributes["href"] = ResolveUrl(this.useLogo.Attributes["href"]);
useLogo.Attributes.Add("xlink:href", useLogo.Attributes["href"]);