标记渲染

时间:2015-03-13 21:21:01

标签: asp.net vb.net hyperlink

我希望每个外部的' A'链接以为目标设置attibute,但忽略所有内部链接

示例:



<a href="http://www.somelink here" title="Some Title">Some Text</a>
&#13;
&#13;
&#13;

成为:

&#13;
&#13;
<a href="http://www.somelink here" title="Some Title" target="_blank">Some Text</a>
&#13;
&#13;
&#13;
但只留下任何非http链接(mailto,〜/,/../ PageName.aspx等。
我写了一个VB.NET(不是c#)类,我将其添加到我的web项目的APP_CODE文件夹中,但代码完全被忽略了
Public Class MyLinks Inherits HyperLink Protected Overrides Sub Render(writer As HtmlTextWriter) Dim alink As HyperLink = Me If alink.NavigateUrl.StartsWith("http") Then writer.RenderBeginTag(HtmlTextWriterTag.A) writer.AddAttribute(HtmlTextWriterAttribute.Href, alink.NavigateUrl) writer.AddAttribute(HtmlTextWriterAttribute.Title, alink.Text) writer.AddAttribute(HtmlTextWriterAttribute.Value, alink.Text) writer.AddAttribute(HtmlTextWriterAttribute.Target, "_blank") writer.RenderEndTag() End If End Sub End Class
显然,我不希望我的网站包含数以千计的超链接控件,但我继承了它,因为我还不知道另一种访问href和tex属性的方法。
我做错了什么以及如何纠正它?

2 个答案:

答案 0 :(得分:1)

使用jQuery更容易,只需添加:

$(document).on('click', "a[href^='http']:not([href*='" + window.location.host + "'][target='_blank']),a[href^='//']:not([href*='" + window.location.host + "'][target='_blank']),a[href$='.pdf'],a[href$='.xls'],a[href$='.xlsx'],a[href$='.doc'],a[href$='.docx'],a[href$='.ppt'],a[href$='.pptx']", null, function () {
$(this).attr('target', '_blank');
});

答案 1 :(得分:0)

我在后面的代码中覆盖了Render方法。 http://forums.asp.net/t/509737.aspx?override+the+href+tag+of+a+LinkButton。 NewWindow这个页面上的代码给了我这个想法。